devicetree: Add USB device type
This commit adds support for describing USB ports in devicetree.cb. It allows a USB port location to be described in the tree with configuration information, and ACPI code to be generated that provides this information to the OS. A new scan_usb_bus() is added that will scan bridges for devices so a tree of ports and hubs can be created. The device address is computed with a 'port type' and a 'port id' which is flexible for SOC to handle depending on their specific USB setup and allows USB2 and USB3 ports to be described separately. For example a board may have devices on two ports, one with a USB2 device and one with a USB3 device, both of which are connected to an xHCI controller with a root hub: xHCI | RootHub | | USB2[0] USB3[2] device pci 14.0 on chip drivers/usb/acpi register "name" = ""Root Hub"" device usb 0.0 on chip drivers/usb/acpi register "name" = ""USB 2.0 Port 0"" device usb 2.0 on end end chip drivers/usb/acpi register "name" = ""USB 3.0 Port 2"" device usb 3.2 on end end end end end Change-Id: I64e6eba503cdab49be393465b535e139a8c90ef4 Signed-off-by: Duncan Laurie <dlaurie@google.com> Reviewed-on: https://review.coreboot.org/26169 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Furquan Shaikh <furquan@google.com>
This commit is contained in:
parent
57df088816
commit
bae9f85ddb
|
@ -256,6 +256,9 @@ u32 dev_path_encode(const struct device *dev)
|
||||||
case DEVICE_PATH_SPI:
|
case DEVICE_PATH_SPI:
|
||||||
ret |= dev->path.spi.cs;
|
ret |= dev->path.spi.cs;
|
||||||
break;
|
break;
|
||||||
|
case DEVICE_PATH_USB:
|
||||||
|
ret |= dev->path.usb.port_type << 8 || dev->path.usb.port_id;
|
||||||
|
break;
|
||||||
case DEVICE_PATH_NONE:
|
case DEVICE_PATH_NONE:
|
||||||
case DEVICE_PATH_MMIO: /* don't care */
|
case DEVICE_PATH_MMIO: /* don't care */
|
||||||
default:
|
default:
|
||||||
|
@ -333,6 +336,10 @@ const char *dev_path(const struct device *dev)
|
||||||
snprintf(buffer, sizeof (buffer), "SPI: %02x",
|
snprintf(buffer, sizeof (buffer), "SPI: %02x",
|
||||||
dev->path.spi.cs);
|
dev->path.spi.cs);
|
||||||
break;
|
break;
|
||||||
|
case DEVICE_PATH_USB:
|
||||||
|
snprintf(buffer, sizeof (buffer), "USB%u port %u",
|
||||||
|
dev->path.usb.port_type, dev->path.usb.port_id);
|
||||||
|
break;
|
||||||
case DEVICE_PATH_MMIO:
|
case DEVICE_PATH_MMIO:
|
||||||
snprintf(buffer, sizeof (buffer), "MMIO: %08x",
|
snprintf(buffer, sizeof (buffer), "MMIO: %08x",
|
||||||
dev->path.mmio.addr);
|
dev->path.mmio.addr);
|
||||||
|
@ -411,6 +418,10 @@ int path_eq(struct device_path *path1, struct device_path *path2)
|
||||||
case DEVICE_PATH_SPI:
|
case DEVICE_PATH_SPI:
|
||||||
equal = (path1->spi.cs == path2->spi.cs);
|
equal = (path1->spi.cs == path2->spi.cs);
|
||||||
break;
|
break;
|
||||||
|
case DEVICE_PATH_USB:
|
||||||
|
equal = (path1->usb.port_type == path2->usb.port_type) &&
|
||||||
|
(path1->usb.port_id == path2->usb.port_id);
|
||||||
|
break;
|
||||||
case DEVICE_PATH_MMIO:
|
case DEVICE_PATH_MMIO:
|
||||||
equal = (path1->mmio.addr == path2->mmio.addr);
|
equal = (path1->mmio.addr == path2->mmio.addr);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -72,6 +72,21 @@ void scan_lpc_bus(struct device *bus)
|
||||||
printk(BIOS_SPEW, "%s for %s done\n", __func__, dev_path(bus));
|
printk(BIOS_SPEW, "%s for %s done\n", __func__, dev_path(bus));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void scan_usb_bus(struct device *bus)
|
||||||
|
{
|
||||||
|
struct bus *link;
|
||||||
|
|
||||||
|
printk(BIOS_SPEW, "%s for %s\n", __func__, dev_path(bus));
|
||||||
|
|
||||||
|
scan_static_bus(bus);
|
||||||
|
|
||||||
|
/* Scan bridges in case this device is a hub */
|
||||||
|
for (link = bus->link_list; link; link = link->next)
|
||||||
|
scan_bridges(link);
|
||||||
|
|
||||||
|
printk(BIOS_SPEW, "%s for %s done\n", __func__, dev_path(bus));
|
||||||
|
}
|
||||||
|
|
||||||
void scan_generic_bus(struct device *bus)
|
void scan_generic_bus(struct device *bus)
|
||||||
{
|
{
|
||||||
struct device *child;
|
struct device *child;
|
||||||
|
|
|
@ -27,6 +27,7 @@ struct i2c_bus_operations;
|
||||||
struct smbus_bus_operations;
|
struct smbus_bus_operations;
|
||||||
struct pnp_mode_ops;
|
struct pnp_mode_ops;
|
||||||
struct spi_bus_operations;
|
struct spi_bus_operations;
|
||||||
|
struct usb_bus_operations;
|
||||||
|
|
||||||
/* Chip operations */
|
/* Chip operations */
|
||||||
struct chip_operations {
|
struct chip_operations {
|
||||||
|
@ -276,6 +277,7 @@ void scan_smbus(struct device *bus);
|
||||||
void scan_generic_bus(struct device *bus);
|
void scan_generic_bus(struct device *bus);
|
||||||
void scan_static_bus(struct device *bus);
|
void scan_static_bus(struct device *bus);
|
||||||
void scan_lpc_bus(struct device *bus);
|
void scan_lpc_bus(struct device *bus);
|
||||||
|
void scan_usb_bus(struct device *bus);
|
||||||
|
|
||||||
#endif /* !defined(__ROMCC__) */
|
#endif /* !defined(__ROMCC__) */
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ enum device_path_type {
|
||||||
DEVICE_PATH_IOAPIC,
|
DEVICE_PATH_IOAPIC,
|
||||||
DEVICE_PATH_GENERIC,
|
DEVICE_PATH_GENERIC,
|
||||||
DEVICE_PATH_SPI,
|
DEVICE_PATH_SPI,
|
||||||
|
DEVICE_PATH_USB,
|
||||||
DEVICE_PATH_MMIO,
|
DEVICE_PATH_MMIO,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -37,6 +38,7 @@ enum device_path_type {
|
||||||
"DEVICE_PATH_IOAPIC", \
|
"DEVICE_PATH_IOAPIC", \
|
||||||
"DEVICE_PATH_GENERIC", \
|
"DEVICE_PATH_GENERIC", \
|
||||||
"DEVICE_PATH_SPI", \
|
"DEVICE_PATH_SPI", \
|
||||||
|
"DEVICE_PATH_USB", \
|
||||||
"DEVICE_PATH_MMIO", \
|
"DEVICE_PATH_MMIO", \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,6 +93,11 @@ struct generic_path {
|
||||||
unsigned int subid;
|
unsigned int subid;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct usb_path {
|
||||||
|
unsigned int port_type;
|
||||||
|
unsigned int port_id;
|
||||||
|
};
|
||||||
|
|
||||||
struct mmio_path {
|
struct mmio_path {
|
||||||
uintptr_t addr;
|
uintptr_t addr;
|
||||||
};
|
};
|
||||||
|
@ -109,6 +116,7 @@ struct device_path {
|
||||||
struct cpu_bus_path cpu_bus;
|
struct cpu_bus_path cpu_bus;
|
||||||
struct generic_path generic;
|
struct generic_path generic;
|
||||||
struct spi_path spi;
|
struct spi_path spi;
|
||||||
|
struct usb_path usb;
|
||||||
struct mmio_path mmio;
|
struct mmio_path mmio;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -358,8 +358,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg );
|
||||||
*yy_cp = '\0'; \
|
*yy_cp = '\0'; \
|
||||||
(yy_c_buf_p) = yy_cp;
|
(yy_c_buf_p) = yy_cp;
|
||||||
|
|
||||||
#define YY_NUM_RULES 35
|
#define YY_NUM_RULES 36
|
||||||
#define YY_END_OF_BUFFER 36
|
#define YY_END_OF_BUFFER 37
|
||||||
/* This struct is not used in this scanner,
|
/* This struct is not used in this scanner,
|
||||||
but its presence is necessary. */
|
but its presence is necessary. */
|
||||||
struct yy_trans_info
|
struct yy_trans_info
|
||||||
|
@ -367,23 +367,23 @@ struct yy_trans_info
|
||||||
flex_int32_t yy_verify;
|
flex_int32_t yy_verify;
|
||||||
flex_int32_t yy_nxt;
|
flex_int32_t yy_nxt;
|
||||||
};
|
};
|
||||||
static yyconst flex_int16_t yy_accept[136] =
|
static yyconst flex_int16_t yy_accept[139] =
|
||||||
{ 0,
|
{ 0,
|
||||||
0, 0, 36, 34, 1, 3, 34, 34, 34, 29,
|
0, 0, 37, 35, 1, 3, 35, 35, 35, 30,
|
||||||
29, 27, 30, 34, 30, 30, 30, 34, 34, 34,
|
30, 28, 31, 35, 31, 31, 31, 35, 35, 35,
|
||||||
34, 34, 34, 34, 34, 34, 1, 3, 34, 0,
|
35, 35, 35, 35, 35, 35, 35, 1, 3, 35,
|
||||||
34, 34, 0, 2, 29, 30, 34, 34, 34, 34,
|
0, 35, 35, 0, 2, 30, 31, 35, 35, 35,
|
||||||
30, 34, 34, 34, 34, 34, 34, 22, 34, 34,
|
35, 31, 35, 35, 35, 35, 35, 35, 23, 35,
|
||||||
34, 34, 7, 34, 34, 34, 34, 34, 33, 33,
|
35, 35, 35, 7, 35, 35, 35, 35, 35, 35,
|
||||||
34, 0, 28, 34, 34, 15, 34, 34, 21, 26,
|
34, 34, 35, 0, 29, 35, 35, 15, 35, 35,
|
||||||
34, 12, 34, 34, 20, 34, 34, 8, 9, 11,
|
22, 27, 35, 12, 35, 35, 21, 35, 35, 8,
|
||||||
34, 19, 34, 34, 0, 31, 4, 34, 34, 34,
|
9, 11, 35, 19, 35, 20, 35, 0, 32, 4,
|
||||||
34, 34, 34, 34, 18, 34, 34, 32, 32, 34,
|
35, 35, 35, 35, 35, 35, 35, 18, 35, 35,
|
||||||
|
|
||||||
34, 34, 34, 34, 34, 13, 34, 34, 34, 5,
|
33, 33, 35, 35, 35, 35, 35, 35, 13, 35,
|
||||||
16, 34, 34, 10, 34, 34, 34, 17, 24, 34,
|
35, 35, 5, 16, 35, 35, 10, 35, 35, 35,
|
||||||
34, 34, 34, 34, 6, 34, 34, 34, 34, 34,
|
17, 25, 35, 35, 35, 35, 35, 6, 35, 35,
|
||||||
23, 34, 14, 25, 0
|
35, 35, 35, 24, 35, 14, 26, 0
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yyconst YY_CHAR yy_ec[256] =
|
static yyconst YY_CHAR yy_ec[256] =
|
||||||
|
@ -426,106 +426,106 @@ static yyconst YY_CHAR yy_meta[39] =
|
||||||
1, 1, 1, 1, 1, 1, 1, 1
|
1, 1, 1, 1, 1, 1, 1, 1
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yyconst flex_uint16_t yy_base[143] =
|
static yyconst flex_uint16_t yy_base[146] =
|
||||||
{ 0,
|
{ 0,
|
||||||
0, 0, 205, 0, 202, 206, 200, 37, 41, 38,
|
0, 0, 207, 0, 204, 208, 202, 37, 41, 38,
|
||||||
165, 0, 44, 187, 54, 78, 60, 179, 45, 182,
|
167, 0, 44, 189, 54, 78, 60, 181, 45, 184,
|
||||||
171, 42, 47, 176, 41, 0, 194, 206, 77, 190,
|
173, 42, 47, 178, 41, 165, 0, 195, 208, 77,
|
||||||
87, 91, 191, 206, 0, 88, 104, 178, 167, 156,
|
191, 87, 91, 192, 208, 0, 88, 104, 179, 168,
|
||||||
93, 163, 158, 168, 159, 167, 161, 167, 152, 152,
|
157, 93, 164, 159, 169, 160, 168, 162, 168, 153,
|
||||||
156, 158, 0, 154, 148, 154, 151, 157, 0, 206,
|
153, 157, 159, 0, 155, 149, 155, 152, 158, 157,
|
||||||
101, 169, 0, 162, 142, 155, 145, 152, 0, 0,
|
0, 208, 101, 169, 0, 162, 142, 155, 145, 152,
|
||||||
147, 0, 146, 136, 0, 140, 135, 0, 0, 0,
|
0, 0, 147, 0, 146, 136, 0, 140, 135, 0,
|
||||||
138, 0, 129, 156, 155, 0, 0, 140, 139, 132,
|
0, 0, 138, 0, 129, 0, 156, 155, 0, 0,
|
||||||
124, 123, 129, 134, 0, 119, 113, 0, 206, 124,
|
140, 139, 132, 124, 123, 129, 134, 0, 119, 113,
|
||||||
|
|
||||||
128, 120, 122, 121, 126, 0, 110, 110, 107, 0,
|
0, 208, 124, 128, 120, 122, 121, 126, 0, 110,
|
||||||
0, 109, 93, 104, 98, 84, 84, 0, 0, 89,
|
110, 107, 0, 0, 109, 93, 104, 98, 84, 84,
|
||||||
77, 87, 71, 66, 0, 64, 62, 50, 47, 33,
|
0, 0, 89, 77, 87, 71, 66, 0, 64, 62,
|
||||||
0, 28, 0, 0, 206, 40, 129, 131, 133, 135,
|
50, 47, 33, 0, 28, 0, 0, 208, 40, 129,
|
||||||
137, 139
|
131, 133, 135, 137, 139
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yyconst flex_int16_t yy_def[143] =
|
static yyconst flex_int16_t yy_def[146] =
|
||||||
{ 0,
|
{ 0,
|
||||||
135, 1, 135, 136, 135, 135, 136, 137, 138, 136,
|
138, 1, 138, 139, 138, 138, 139, 140, 141, 139,
|
||||||
10, 136, 10, 136, 10, 10, 10, 136, 136, 136,
|
10, 139, 10, 139, 10, 10, 10, 139, 139, 139,
|
||||||
136, 136, 136, 136, 136, 136, 135, 135, 137, 139,
|
139, 139, 139, 139, 139, 139, 139, 138, 138, 140,
|
||||||
140, 138, 141, 135, 10, 10, 10, 136, 136, 136,
|
142, 143, 141, 144, 138, 10, 10, 10, 139, 139,
|
||||||
10, 136, 136, 136, 136, 136, 136, 136, 136, 136,
|
139, 10, 139, 139, 139, 139, 139, 139, 139, 139,
|
||||||
136, 136, 136, 136, 136, 136, 136, 136, 136, 135,
|
139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
|
||||||
140, 142, 37, 136, 136, 136, 136, 136, 136, 136,
|
139, 138, 143, 145, 38, 139, 139, 139, 139, 139,
|
||||||
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
|
139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
|
||||||
136, 136, 136, 136, 135, 136, 136, 136, 136, 136,
|
139, 139, 139, 139, 139, 139, 139, 138, 139, 139,
|
||||||
136, 136, 136, 136, 136, 136, 136, 136, 135, 136,
|
139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
|
||||||
|
|
||||||
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
|
139, 138, 139, 139, 139, 139, 139, 139, 139, 139,
|
||||||
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
|
139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
|
||||||
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
|
139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
|
||||||
136, 136, 136, 136, 0, 135, 135, 135, 135, 135,
|
139, 139, 139, 139, 139, 139, 139, 0, 138, 138,
|
||||||
135, 135
|
138, 138, 138, 138, 138
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yyconst flex_uint16_t yy_nxt[245] =
|
static yyconst flex_uint16_t yy_nxt[247] =
|
||||||
{ 0,
|
{ 0,
|
||||||
4, 5, 6, 7, 8, 9, 10, 11, 10, 12,
|
4, 5, 6, 7, 8, 9, 10, 11, 10, 12,
|
||||||
13, 13, 14, 4, 4, 4, 13, 13, 15, 16,
|
13, 13, 14, 4, 4, 4, 13, 13, 15, 16,
|
||||||
17, 13, 18, 4, 19, 20, 21, 4, 22, 23,
|
17, 13, 18, 4, 19, 20, 21, 4, 22, 23,
|
||||||
4, 24, 25, 4, 4, 4, 4, 4, 30, 30,
|
4, 24, 25, 4, 26, 4, 4, 4, 31, 31,
|
||||||
26, 31, 33, 34, 35, 35, 35, 134, 36, 36,
|
27, 32, 34, 35, 36, 36, 36, 137, 37, 37,
|
||||||
36, 36, 36, 46, 36, 36, 36, 36, 36, 36,
|
37, 37, 37, 47, 37, 37, 37, 37, 37, 37,
|
||||||
36, 36, 36, 52, 133, 54, 36, 36, 36, 53,
|
37, 37, 37, 53, 136, 55, 37, 37, 37, 54,
|
||||||
57, 132, 47, 48, 55, 58, 49, 39, 30, 30,
|
58, 135, 48, 49, 56, 59, 50, 40, 31, 31,
|
||||||
131, 59, 130, 40, 36, 36, 36, 44, 62, 62,
|
134, 61, 133, 41, 37, 37, 37, 45, 64, 64,
|
||||||
129, 26, 33, 34, 36, 36, 36, 128, 41, 36,
|
132, 27, 34, 35, 37, 37, 37, 131, 42, 37,
|
||||||
|
|
||||||
36, 36, 62, 62, 127, 84, 42, 126, 125, 43,
|
37, 37, 64, 64, 130, 87, 43, 129, 128, 44,
|
||||||
63, 63, 63, 124, 63, 63, 123, 122, 121, 120,
|
65, 65, 65, 127, 65, 65, 126, 125, 124, 123,
|
||||||
63, 63, 63, 63, 63, 63, 119, 118, 67, 29,
|
65, 65, 65, 65, 65, 65, 122, 121, 69, 30,
|
||||||
29, 32, 32, 30, 30, 61, 61, 33, 33, 62,
|
30, 33, 33, 31, 31, 63, 63, 34, 34, 64,
|
||||||
62, 117, 116, 115, 114, 113, 112, 111, 110, 109,
|
64, 120, 119, 118, 117, 116, 115, 114, 113, 112,
|
||||||
108, 107, 106, 105, 104, 103, 102, 101, 100, 99,
|
111, 110, 109, 108, 107, 106, 105, 104, 103, 102,
|
||||||
98, 97, 96, 95, 94, 93, 92, 91, 90, 89,
|
101, 100, 99, 98, 97, 96, 95, 94, 93, 92,
|
||||||
88, 87, 86, 85, 83, 82, 81, 80, 79, 78,
|
91, 90, 89, 88, 86, 85, 84, 83, 82, 81,
|
||||||
77, 76, 75, 74, 73, 72, 71, 70, 69, 68,
|
80, 79, 78, 77, 76, 75, 74, 73, 72, 71,
|
||||||
66, 65, 64, 34, 60, 27, 56, 51, 50, 45,
|
70, 68, 67, 66, 35, 62, 28, 60, 57, 52,
|
||||||
|
|
||||||
38, 37, 28, 27, 135, 3, 135, 135, 135, 135,
|
51, 46, 39, 38, 29, 28, 138, 3, 138, 138,
|
||||||
135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
|
138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
|
||||||
135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
|
138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
|
||||||
135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
|
138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
|
||||||
135, 135, 135, 135
|
138, 138, 138, 138, 138, 138
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yyconst flex_int16_t yy_chk[245] =
|
static yyconst flex_int16_t yy_chk[247] =
|
||||||
{ 0,
|
{ 0,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 8, 8,
|
1, 1, 1, 1, 1, 1, 1, 1, 8, 8,
|
||||||
136, 8, 9, 9, 10, 10, 10, 132, 10, 10,
|
139, 8, 9, 9, 10, 10, 10, 135, 10, 10,
|
||||||
13, 13, 13, 19, 10, 10, 10, 10, 10, 10,
|
13, 13, 13, 19, 10, 10, 10, 10, 10, 10,
|
||||||
15, 15, 15, 22, 130, 23, 17, 17, 17, 22,
|
15, 15, 15, 22, 133, 23, 17, 17, 17, 22,
|
||||||
25, 129, 19, 19, 23, 25, 19, 15, 29, 29,
|
25, 132, 19, 19, 23, 25, 19, 15, 30, 30,
|
||||||
128, 29, 127, 15, 16, 16, 16, 17, 31, 31,
|
131, 30, 130, 15, 16, 16, 16, 17, 32, 32,
|
||||||
126, 31, 32, 32, 36, 36, 36, 124, 16, 41,
|
129, 32, 33, 33, 37, 37, 37, 127, 16, 42,
|
||||||
|
|
||||||
41, 41, 61, 61, 123, 61, 16, 122, 121, 16,
|
42, 42, 63, 63, 126, 63, 16, 125, 124, 16,
|
||||||
37, 37, 37, 120, 37, 37, 117, 116, 115, 114,
|
38, 38, 38, 123, 38, 38, 120, 119, 118, 117,
|
||||||
37, 37, 37, 37, 37, 37, 113, 112, 41, 137,
|
38, 38, 38, 38, 38, 38, 116, 115, 42, 140,
|
||||||
137, 138, 138, 139, 139, 140, 140, 141, 141, 142,
|
140, 141, 141, 142, 142, 143, 143, 144, 144, 145,
|
||||||
142, 109, 108, 107, 105, 104, 103, 102, 101, 100,
|
145, 112, 111, 110, 108, 107, 106, 105, 104, 103,
|
||||||
97, 96, 94, 93, 92, 91, 90, 89, 88, 85,
|
100, 99, 97, 96, 95, 94, 93, 92, 91, 88,
|
||||||
84, 83, 81, 77, 76, 74, 73, 71, 68, 67,
|
87, 85, 83, 79, 78, 76, 75, 73, 70, 69,
|
||||||
66, 65, 64, 62, 58, 57, 56, 55, 54, 52,
|
68, 67, 66, 64, 60, 59, 58, 57, 56, 55,
|
||||||
51, 50, 49, 48, 47, 46, 45, 44, 43, 42,
|
53, 52, 51, 50, 49, 48, 47, 46, 45, 44,
|
||||||
40, 39, 38, 33, 30, 27, 24, 21, 20, 18,
|
43, 41, 40, 39, 34, 31, 28, 26, 24, 21,
|
||||||
|
|
||||||
14, 11, 7, 5, 3, 135, 135, 135, 135, 135,
|
20, 18, 14, 11, 7, 5, 3, 138, 138, 138,
|
||||||
135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
|
138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
|
||||||
135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
|
138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
|
||||||
135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
|
138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
|
||||||
135, 135, 135, 135
|
138, 138, 138, 138, 138, 138
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yy_state_type yy_last_accepting_state;
|
static yy_state_type yy_last_accepting_state;
|
||||||
|
@ -804,13 +804,13 @@ yy_match:
|
||||||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||||
{
|
{
|
||||||
yy_current_state = (int) yy_def[yy_current_state];
|
yy_current_state = (int) yy_def[yy_current_state];
|
||||||
if ( yy_current_state >= 136 )
|
if ( yy_current_state >= 139 )
|
||||||
yy_c = yy_meta[(unsigned int) yy_c];
|
yy_c = yy_meta[(unsigned int) yy_c];
|
||||||
}
|
}
|
||||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
|
yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
|
||||||
++yy_cp;
|
++yy_cp;
|
||||||
}
|
}
|
||||||
while ( yy_base[yy_current_state] != 206 );
|
while ( yy_base[yy_current_state] != 208 );
|
||||||
|
|
||||||
yy_find_action:
|
yy_find_action:
|
||||||
yy_act = yy_accept[yy_current_state];
|
yy_act = yy_accept[yy_current_state];
|
||||||
|
@ -914,39 +914,39 @@ YY_RULE_SETUP
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 20:
|
case 20:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{yylval.number=IRQ; return(RESOURCE);}
|
{yylval.number=USB; return(BUS);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 21:
|
case 21:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{yylval.number=DRQ; return(RESOURCE);}
|
{yylval.number=IRQ; return(RESOURCE);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 22:
|
case 22:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{yylval.number=IO; return(RESOURCE);}
|
{yylval.number=DRQ; return(RESOURCE);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 23:
|
case 23:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{return(IOAPIC_IRQ);}
|
{yylval.number=IO; return(RESOURCE);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 24:
|
case 24:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{return(INHERIT);}
|
{return(IOAPIC_IRQ);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 25:
|
case 25:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{return(SUBSYSTEMID);}
|
{return(INHERIT);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 26:
|
case 26:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{return(END);}
|
{return(SUBSYSTEMID);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 27:
|
case 27:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{return(EQUALS);}
|
{return(END);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 28:
|
case 28:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}
|
{return(EQUALS);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 29:
|
case 29:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
|
@ -958,12 +958,11 @@ YY_RULE_SETUP
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 31:
|
case 31:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(PCIINT);}
|
{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(NUMBER);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 32:
|
case 32:
|
||||||
/* rule 32 can match eol */
|
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
|
{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(PCIINT);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 33:
|
case 33:
|
||||||
/* rule 33 can match eol */
|
/* rule 33 can match eol */
|
||||||
|
@ -971,10 +970,15 @@ YY_RULE_SETUP
|
||||||
{yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
|
{yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 34:
|
case 34:
|
||||||
|
/* rule 34 can match eol */
|
||||||
|
YY_RULE_SETUP
|
||||||
|
{yylval.string = malloc(yyleng-1); strncpy(yylval.string, yytext+1, yyleng-2); yylval.string[yyleng-2]='\0'; return(STRING);}
|
||||||
|
YY_BREAK
|
||||||
|
case 35:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(STRING);}
|
{yylval.string = malloc(yyleng+1); strncpy(yylval.string, yytext, yyleng); yylval.string[yyleng]='\0'; return(STRING);}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 35:
|
case 36:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
ECHO;
|
ECHO;
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
|
@ -1270,7 +1274,7 @@ static int yy_get_next_buffer (void)
|
||||||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||||
{
|
{
|
||||||
yy_current_state = (int) yy_def[yy_current_state];
|
yy_current_state = (int) yy_def[yy_current_state];
|
||||||
if ( yy_current_state >= 136 )
|
if ( yy_current_state >= 139 )
|
||||||
yy_c = yy_meta[(unsigned int) yy_c];
|
yy_c = yy_meta[(unsigned int) yy_c];
|
||||||
}
|
}
|
||||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
|
yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
|
||||||
|
@ -1298,11 +1302,11 @@ static int yy_get_next_buffer (void)
|
||||||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||||
{
|
{
|
||||||
yy_current_state = (int) yy_def[yy_current_state];
|
yy_current_state = (int) yy_def[yy_current_state];
|
||||||
if ( yy_current_state >= 136 )
|
if ( yy_current_state >= 139 )
|
||||||
yy_c = yy_meta[(unsigned int) yy_c];
|
yy_c = yy_meta[(unsigned int) yy_c];
|
||||||
}
|
}
|
||||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
|
yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
|
||||||
yy_is_jam = (yy_current_state == 135);
|
yy_is_jam = (yy_current_state == 138);
|
||||||
|
|
||||||
return yy_is_jam ? 0 : yy_current_state;
|
return yy_is_jam ? 0 : yy_current_state;
|
||||||
}
|
}
|
||||||
|
|
|
@ -290,6 +290,10 @@ struct device *new_device(struct device *parent, struct device *busdev,
|
||||||
new_d->path = ".type=DEVICE_PATH_SPI,{.spi={ .cs = 0x%x }}";
|
new_d->path = ".type=DEVICE_PATH_SPI,{.spi={ .cs = 0x%x }}";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case USB:
|
||||||
|
new_d->path = ".type=DEVICE_PATH_USB,{.usb={ .port_type = %d, .port_id = %d }}";
|
||||||
|
break;
|
||||||
|
|
||||||
case MMIO:
|
case MMIO:
|
||||||
new_d->path = ".type=DEVICE_PATH_MMIO,{.mmio={ .addr = 0x%x }}";
|
new_d->path = ".type=DEVICE_PATH_MMIO,{.mmio={ .addr = 0x%x }}";
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -40,6 +40,7 @@ domain {yylval.number=DOMAIN; return(BUS);}
|
||||||
generic {yylval.number=GENERIC; return(BUS);}
|
generic {yylval.number=GENERIC; return(BUS);}
|
||||||
mmio {yylval.number=MMIO; return(BUS);}
|
mmio {yylval.number=MMIO; return(BUS);}
|
||||||
spi {yylval.number=SPI; return(BUS);}
|
spi {yylval.number=SPI; return(BUS);}
|
||||||
|
usb {yylval.number=USB; return(BUS);}
|
||||||
irq {yylval.number=IRQ; return(RESOURCE);}
|
irq {yylval.number=IRQ; return(RESOURCE);}
|
||||||
drq {yylval.number=DRQ; return(RESOURCE);}
|
drq {yylval.number=DRQ; return(RESOURCE);}
|
||||||
io {yylval.number=IO; return(RESOURCE);}
|
io {yylval.number=IO; return(RESOURCE);}
|
||||||
|
|
|
@ -151,7 +151,8 @@ extern int yydebug;
|
||||||
PCIINT = 283,
|
PCIINT = 283,
|
||||||
GENERIC = 284,
|
GENERIC = 284,
|
||||||
SPI = 285,
|
SPI = 285,
|
||||||
MMIO = 286
|
USB = 286,
|
||||||
|
MMIO = 287
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -428,7 +429,7 @@ union yyalloc
|
||||||
#define YYLAST 39
|
#define YYLAST 39
|
||||||
|
|
||||||
/* YYNTOKENS -- Number of terminals. */
|
/* YYNTOKENS -- Number of terminals. */
|
||||||
#define YYNTOKENS 32
|
#define YYNTOKENS 33
|
||||||
/* YYNNTS -- Number of nonterminals. */
|
/* YYNNTS -- Number of nonterminals. */
|
||||||
#define YYNNTS 13
|
#define YYNNTS 13
|
||||||
/* YYNRULES -- Number of rules. */
|
/* YYNRULES -- Number of rules. */
|
||||||
|
@ -439,7 +440,7 @@ union yyalloc
|
||||||
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
|
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
|
||||||
by yylex, with out-of-bounds checking. */
|
by yylex, with out-of-bounds checking. */
|
||||||
#define YYUNDEFTOK 2
|
#define YYUNDEFTOK 2
|
||||||
#define YYMAXUTOK 286
|
#define YYMAXUTOK 287
|
||||||
|
|
||||||
#define YYTRANSLATE(YYX) \
|
#define YYTRANSLATE(YYX) \
|
||||||
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
|
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
|
||||||
|
@ -476,7 +477,7 @@ static const yytype_uint8 yytranslate[] =
|
||||||
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
|
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
|
||||||
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
||||||
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
||||||
25, 26, 27, 28, 29, 30, 31
|
25, 26, 27, 28, 29, 30, 31, 32
|
||||||
};
|
};
|
||||||
|
|
||||||
#if YYDEBUG
|
#if YYDEBUG
|
||||||
|
@ -498,7 +499,7 @@ static const char *const yytname[] =
|
||||||
"BUS", "RESOURCE", "END", "EQUALS", "HEX", "STRING", "PCI", "PNP", "I2C",
|
"BUS", "RESOURCE", "END", "EQUALS", "HEX", "STRING", "PCI", "PNP", "I2C",
|
||||||
"APIC", "CPU_CLUSTER", "CPU", "DOMAIN", "IRQ", "DRQ", "IO", "NUMBER",
|
"APIC", "CPU_CLUSTER", "CPU", "DOMAIN", "IRQ", "DRQ", "IO", "NUMBER",
|
||||||
"SUBSYSTEMID", "INHERIT", "IOAPIC_IRQ", "IOAPIC", "PCIINT", "GENERIC",
|
"SUBSYSTEMID", "INHERIT", "IOAPIC_IRQ", "IOAPIC", "PCIINT", "GENERIC",
|
||||||
"SPI", "MMIO", "$accept", "devtree", "$@1", "chipchildren",
|
"SPI", "USB", "MMIO", "$accept", "devtree", "$@1", "chipchildren",
|
||||||
"devicechildren", "chip", "@2", "device", "@3", "resource", "registers",
|
"devicechildren", "chip", "@2", "device", "@3", "resource", "registers",
|
||||||
"subsystemid", "ioapic_irq", YY_NULLPTR
|
"subsystemid", "ioapic_irq", YY_NULLPTR
|
||||||
};
|
};
|
||||||
|
@ -512,7 +513,7 @@ static const yytype_uint16 yytoknum[] =
|
||||||
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
|
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
|
||||||
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
|
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
|
||||||
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
|
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
|
||||||
285, 286
|
285, 286, 287
|
||||||
};
|
};
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
@ -586,19 +587,19 @@ static const yytype_int8 yycheck[] =
|
||||||
symbol of state STATE-NUM. */
|
symbol of state STATE-NUM. */
|
||||||
static const yytype_uint8 yystos[] =
|
static const yytype_uint8 yystos[] =
|
||||||
{
|
{
|
||||||
0, 33, 34, 0, 3, 37, 12, 38, 35, 4,
|
0, 34, 35, 0, 3, 38, 12, 39, 36, 4,
|
||||||
5, 9, 37, 39, 42, 7, 12, 23, 10, 6,
|
5, 9, 38, 40, 43, 7, 12, 23, 10, 6,
|
||||||
12, 40, 36, 8, 9, 24, 26, 37, 39, 41,
|
12, 41, 37, 8, 9, 24, 26, 38, 40, 42,
|
||||||
43, 44, 23, 23, 23, 10, 23, 28, 23, 25,
|
44, 45, 23, 23, 23, 10, 23, 28, 23, 25,
|
||||||
23
|
23
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
|
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
|
||||||
static const yytype_uint8 yyr1[] =
|
static const yytype_uint8 yyr1[] =
|
||||||
{
|
{
|
||||||
0, 32, 34, 33, 35, 35, 35, 35, 36, 36,
|
0, 33, 35, 34, 36, 36, 36, 36, 37, 37,
|
||||||
36, 36, 36, 36, 38, 37, 40, 39, 41, 42,
|
37, 37, 37, 37, 39, 38, 41, 40, 42, 43,
|
||||||
43, 43, 44
|
44, 44, 45
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
|
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
|
||||||
|
|
|
@ -73,7 +73,8 @@ extern int yydebug;
|
||||||
PCIINT = 283,
|
PCIINT = 283,
|
||||||
GENERIC = 284,
|
GENERIC = 284,
|
||||||
SPI = 285,
|
SPI = 285,
|
||||||
MMIO = 286
|
USB = 286,
|
||||||
|
MMIO = 287
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ static struct device *cur_parent, *cur_bus;
|
||||||
int number;
|
int number;
|
||||||
}
|
}
|
||||||
|
|
||||||
%token CHIP DEVICE REGISTER BOOL BUS RESOURCE END EQUALS HEX STRING PCI PNP I2C APIC CPU_CLUSTER CPU DOMAIN IRQ DRQ IO NUMBER SUBSYSTEMID INHERIT IOAPIC_IRQ IOAPIC PCIINT GENERIC SPI MMIO
|
%token CHIP DEVICE REGISTER BOOL BUS RESOURCE END EQUALS HEX STRING PCI PNP I2C APIC CPU_CLUSTER CPU DOMAIN IRQ DRQ IO NUMBER SUBSYSTEMID INHERIT IOAPIC_IRQ IOAPIC PCIINT GENERIC SPI USB MMIO
|
||||||
%%
|
%%
|
||||||
devtree: { cur_parent = cur_bus = head; } chip { postprocess_devtree(); } ;
|
devtree: { cur_parent = cur_bus = head; } chip { postprocess_devtree(); } ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue