Author: jcrouse Date: 2008-10-20 18:51:20 +0200 (Mon, 20 Oct 2008) New Revision: 3672
Modified: trunk/payloads/libpayload/drivers/pci.c trunk/payloads/libpayload/include/pci.h Log: [PATCH] libpayload: Add pci_set_bus_master() function
Allow the payload to enable a PCI device as a bus master.
Signed-off-by: Jordan Crouse jordan.crouse@amd.com Acked-by: Patrick Georgi patrick.georgi@coresystems.de
Modified: trunk/payloads/libpayload/drivers/pci.c =================================================================== --- trunk/payloads/libpayload/drivers/pci.c 2008-10-20 16:50:47 UTC (rev 3671) +++ trunk/payloads/libpayload/drivers/pci.c 2008-10-20 16:51:20 UTC (rev 3672) @@ -112,3 +112,11 @@ { return pci_read_config32(dev, 0x10 + (bar * 4)); } + +void pci_set_bus_master(pcidev_t dev) +{ + u16 val = pci_read_config16(dev, REG_COMMAND); + val |= REG_COMMAND_BM; + pci_write_config16(dev, REG_COMMAND, val); +} +
Modified: trunk/payloads/libpayload/include/pci.h =================================================================== --- trunk/payloads/libpayload/include/pci.h 2008-10-20 16:50:47 UTC (rev 3671) +++ trunk/payloads/libpayload/include/pci.h 2008-10-20 16:51:20 UTC (rev 3672) @@ -35,10 +35,12 @@ typedef u32 pcidev_t;
#define REG_VENDOR_ID 0x00 -#define REG_DEVICE_ID 0x04 +#define REG_COMMAND 0x04 #define REG_HEADER_TYPE 0x0E #define REG_PRIMARY_BUS 0x18
+#define REG_COMMAND_BM (1 << 2) + #define HEADER_TYPE_NORMAL 0 #define HEADER_TYPE_BRIDGE 1 #define HEADER_TYPE_CARDBUS 2 @@ -64,4 +66,6 @@ int pci_find_device(u16 vid, u16 did, pcidev_t *dev); u32 pci_read_resource(pcidev_t dev, int bar);
+void pci_set_bus_master(pcidev_t dev); + #endif