Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4438 → Rev 4437

/branches/dd/uspace/srv/pci/intel_method1.c
File deleted
/branches/dd/uspace/srv/pci/psycho.c
84,8 → 84,10
 
uint8_t pci_conf_read_8(pci_dev_t *dev, int reg)
{
uint8_t res;
uint8_t res;
futex_down(&pci_conf_futex);
psycho_conf_read(dev, reg, &res, sizeof(uint8_t));
futex_up(&pci_conf_futex);
return res;
}
 
92,7 → 94,9
uint16_t pci_conf_read_16(pci_dev_t *dev, int reg)
{
uint16_t res;
futex_down(&pci_conf_futex);
psycho_conf_read(dev, reg, (uint8_t *)(&res), sizeof(uint16_t));
futex_up(&pci_conf_futex);
return res;
}
 
99,7 → 103,9
uint32_t pci_conf_read_32(pci_dev_t *dev, int reg)
{
uint32_t res;
psycho_conf_read(dev, reg, (uint8_t *)(&res), sizeof(uint32_t));
futex_down(&pci_conf_futex);
psycho_conf_read(dev, reg, (uint8_t *)(&res), sizeof(uint32_t));
futex_up(&pci_conf_futex);
return res;
}
 
115,7 → 121,6
 
static void psycho_conf_read(pci_dev_t *d, int reg, uint8_t *buf, int len)
{
futex_down(&pci_conf_futex);
switch (len) {
case 1:
buf[0] = pio_read_8(psycho_conf_addr(d, reg));
126,13 → 131,11
case 4:
*((uint32_t *)buf) = invert_endianness_32(pio_read_32(psycho_conf_addr(d, reg)));
break;
}
futex_up(&pci_conf_futex);
}
}
 
static void psycho_conf_write(pci_dev_t *d, int reg, uint8_t *buf, int len)
{
futex_down(&pci_conf_futex);
switch (len) {
case 1:
pio_write_8(psycho_conf_addr(d, reg), buf[0]);
144,7 → 147,6
pio_write_32(psycho_conf_addr(d, reg), invert_endianness_32(*((uint32_t *)buf)));
break;
}
futex_up(&pci_conf_futex);
}
 
/* pci bus structure initialization */
/branches/dd/uspace/srv/pci/pci.c
26,18 → 26,16
bool multi;
uint8_t header_type;
for (dnum = 0; dnum < 32; dnum++) {
printf("PCI: scanning bus number %d\n", bus->num);
for (dnum = 0; dnum < 256; dnum++) {
multi = true;
for (fnum = 0; multi && fnum < 8; fnum++) {
pci_init_dev(dev, bus, dnum, fnum);
dev->vendor_id = pci_conf_read_16(dev, PCI_VENDOR_ID);
dev->device_id = pci_conf_read_16(dev, PCI_DEVICE_ID);
if (dev->vendor_id == 0xFFFF) { // device is not present, go on scanning the bus
if (fnum == 0) {
break;
} else {
continue;
}
if (dev->vendor_id == 0xFFFF) {
continue; // device is not present, go on scanning the bus
}
header_type = pci_conf_read_8(dev, PCI_HEADER_TYPE);
if (fnum == 0) {
45,14 → 43,14
}
header_type = header_type & 0x7F; // clear the multifunction bit
printf("PCI: adding new device %d : %d : %d", dev->bus->num, dnum, fnum);
printf(" - vendor = 0x%04X, device = 0x%04X.\n", dev->vendor_id, dev->device_id);
pci_device_register(dev);
printf("PCI: adding new device %d : %d", dnum, fnum);
printf(" - vendor = 0x%x, device = 0x%x.\n", dev->vendor_id, dev->device_id);
pci_device_register(dev);
dev = pci_alloc_dev(); // alloc new aux. dev. structure
if (header_type == PCI_HEADER_TYPE_BRIDGE || header_type == PCI_HEADER_TYPE_CARDBUS ) {
bus_num = pci_conf_read_8(dev, PCI_BRIDGE_SEC_BUS_NUM);
printf("PCI: device is pci-to-pci bridge, secondary bus number = %d.\n", bus_num);
if(bus_num > bus->num) {
if(bus_num != bus->num) {
child_bus = pci_alloc_bus();
pci_init_bus(child_bus, bus, bus_num);
pci_bus_register(child_bus);
59,8 → 57,6
pci_bus_scan(child_bus);
}
}
dev = pci_alloc_dev(); // alloc new aux. dev. structure
}
}
/branches/dd/uspace/srv/pci/pci.h
4,7 → 4,6
//#include <arch/types.h>
#include <libadt/list.h>
#include <stdio.h>
#include <stdlib.h>
 
struct pci_drv;
struct pci_dev;
/branches/dd/uspace/srv/pci/pci_conf.h
7,4 → 7,4
uint16_t pci_conf_read_16(pci_dev_t *dev, int reg);
uint32_t pci_conf_read_32(pci_dev_t *dev, int reg);
 
#endif
#endif
/branches/dd/uspace/srv/pci/pci_bus.h
4,4 → 4,4
int pci_bus_init();
void pci_bus_clean();
 
#endif
#endif
/branches/dd/uspace/srv/pci/Makefile
50,10 → 50,6
SOURCES += psycho.c
endif
 
ifeq ($(UARCH), ia32)
SOURCES += intel_method1.c
endif
 
CFLAGS += -D$(UARCH)
 
OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))