Distinguish between the different variants and configurations of Sunix
{MIO,SER}5xxxx chips instead of treating all of them as PUC_PORT_2S. Among others, this fixes the hang seen when trying to probe the none- existent second UART on an actually 1-port chip. Obtained from: NetBSD (BAR layouts) MFC after: 3 days Sponsored by: Bally Wulff Games & Entertainment GmbH
This commit is contained in:
parent
04e79987ba
commit
d636882622
@ -59,6 +59,7 @@ static puc_config_f puc_config_oxford_pcie;
|
||||
static puc_config_f puc_config_quatech;
|
||||
static puc_config_f puc_config_syba;
|
||||
static puc_config_f puc_config_siig;
|
||||
static puc_config_f puc_config_sunix;
|
||||
static puc_config_f puc_config_timedia;
|
||||
static puc_config_f puc_config_titan;
|
||||
|
||||
@ -987,12 +988,53 @@ const struct puc_cfg puc_pci_devices[] = {
|
||||
.config_function = puc_config_syba
|
||||
},
|
||||
|
||||
{ 0x1fd4, 0x1999, 0xffff, 0,
|
||||
"Sunix SER5437A",
|
||||
/* Prevent puc(4) from attaching, directly use uart(4) instead. */
|
||||
{ 0x1fd4, 0x1999, 0x1fd4, 0x0001,
|
||||
"Sunix SER5xxxx 1-port serial",
|
||||
DEFAULT_RCLK * 8,
|
||||
PUC_PORT_1S, 0x10, 0, 8,
|
||||
},
|
||||
|
||||
{ 0x1fd4, 0x1999, 0x1fd4, 0x0002,
|
||||
"Sunix SER5xxxx 2-port serial",
|
||||
DEFAULT_RCLK * 8,
|
||||
PUC_PORT_2S, 0x10, 0, 8,
|
||||
},
|
||||
|
||||
{ 0x1fd4, 0x1999, 0x1fd4, 0x0004,
|
||||
"Sunix SER5xxxx 4-port serial",
|
||||
DEFAULT_RCLK * 8,
|
||||
PUC_PORT_4S, 0x10, 0, 8,
|
||||
},
|
||||
|
||||
{ 0x1fd4, 0x1999, 0x1fd4, 0x0008,
|
||||
"Sunix SER5xxxx 8-port serial",
|
||||
DEFAULT_RCLK * 8,
|
||||
PUC_PORT_8S, -1, -1, -1,
|
||||
.config_function = puc_config_sunix
|
||||
},
|
||||
|
||||
{ 0x1fd4, 0x1999, 0x1fd4, 0x0101,
|
||||
"Sunix MIO5xxxx 1-port serial and 1284 Printer port",
|
||||
DEFAULT_RCLK * 8,
|
||||
PUC_PORT_1S1P, -1, -1, -1,
|
||||
.config_function = puc_config_sunix
|
||||
},
|
||||
|
||||
{ 0x1fd4, 0x1999, 0x1fd4, 0x0102,
|
||||
"Sunix MIOxxxx 2-port serial and 1284 Printer port",
|
||||
DEFAULT_RCLK * 8,
|
||||
PUC_PORT_2S1P, -1, -1, -1,
|
||||
.config_function = puc_config_sunix
|
||||
},
|
||||
|
||||
{ 0x1fd4, 0x1999, 0x1fd4, 0x0104,
|
||||
"Sunix MIO5xxxx 4-port serial and 1284 Printer port",
|
||||
DEFAULT_RCLK * 8,
|
||||
PUC_PORT_4S1P, -1, -1, -1,
|
||||
.config_function = puc_config_sunix
|
||||
},
|
||||
|
||||
{ 0x5372, 0x6873, 0xffff, 0,
|
||||
"Sun 1040 PCI Quad Serial",
|
||||
DEFAULT_RCLK,
|
||||
@ -1024,8 +1066,8 @@ const struct puc_cfg puc_pci_devices[] = {
|
||||
},
|
||||
|
||||
/*
|
||||
* This is more specific than the generic NM9835 entry that follows, and
|
||||
* is placed here to _prevent_ puc from claiming this single port card.
|
||||
* This is more specific than the generic NM9835 entry, and is placed
|
||||
* here to _prevent_ puc(4) from claiming this single port card.
|
||||
*
|
||||
* uart(4) will claim this device.
|
||||
*/
|
||||
@ -1613,6 +1655,31 @@ puc_config_oxford_pcie(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
static int
|
||||
puc_config_sunix(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
|
||||
intptr_t *res)
|
||||
{
|
||||
int error;
|
||||
|
||||
switch (cmd) {
|
||||
case PUC_CFG_GET_OFS:
|
||||
error = puc_config(sc, PUC_CFG_GET_TYPE, port, res);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
*res = (*res == PUC_TYPE_SERIAL) ? (port & 3) * 8 : 0;
|
||||
return (0);
|
||||
case PUC_CFG_GET_RID:
|
||||
error = puc_config(sc, PUC_CFG_GET_TYPE, port, res);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
*res = (*res == PUC_TYPE_SERIAL && port <= 3) ? 0x10 : 0x14;
|
||||
return (0);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
static int
|
||||
puc_config_titan(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
|
||||
intptr_t *res)
|
||||
|
@ -114,6 +114,8 @@ static const struct pci_id pci_ns8250_ids[] = {
|
||||
0x10, 16384000 },
|
||||
{ 0x14e4, 0x4344, 0xffff, 0, "Sony Ericsson GC89 PC Card", 0x10},
|
||||
{ 0x151f, 0x0000, 0xffff, 0, "TOPIC Semiconductor TP560 56k modem", 0x10 },
|
||||
{ 0x1fd4, 0x1999, 0x1fd4, 0x0001, "Sunix SER5xxxx Serial Port", 0x10,
|
||||
8 * DEFAULT_RCLK },
|
||||
{ 0x8086, 0x1c3d, 0xffff, 0, "Intel AMT - KT Controller", 0x10 },
|
||||
{ 0x8086, 0x1d3d, 0xffff, 0, "Intel C600/X79 Series Chipset KT Controller", 0x10 },
|
||||
{ 0x8086, 0x2e17, 0xffff, 0, "4 Series Chipset Serial KT Controller", 0x10 },
|
||||
|
Loading…
Reference in New Issue
Block a user