Esempio n. 1
0
static int lsmbus_block_write(device_t dev, uint8_t cmd, u8 bytes, const u8 *buffer)
{
	unsigned device;
	struct resource *res;

	device = dev->path.i2c.device;
	res = find_resource(get_pbus_smbus(dev)->dev, 0x58);

	return do_smbus_block_write(res->base, device, cmd, bytes, buffer);
}
Esempio n. 2
0
static void hudson_lpc_set_resources(struct device *dev)
{
	struct resource *res;

	/* Special case. SPI Base Address. The SpiRomEnable should STAY set. */
	res = find_resource(dev, 2);
	pci_write_config32(dev, SPIROM_BASE_ADDRESS_REGISTER, res->base | SPI_ROM_ENABLE);

	pci_dev_set_resources(dev);
}
Esempio n. 3
0
static int lsmbus_write_byte(device_t dev, uint8_t address, uint8_t val)
{
	unsigned device;
	struct resource *res;

	device = dev->path.i2c.device;
	res = find_resource(get_pbus_smbus(dev)->dev, 0x58);

	return do_smbus_write_byte(res->base, device, address, val);
}
Esempio n. 4
0
static int lsmbus_recv_byte(device_t dev)
{
	unsigned device;
	struct resource *res;

	device = dev->path.i2c.device;
	res = find_resource(get_pbus_smbus(dev)->dev, 0x58);

	return do_smbus_recv_byte(res->base, device);
}
Esempio n. 5
0
void
free_resource(fc_resource_t **head, void *ptr,  int (cmp)(void *, void *))
{
	fc_resource_t *r;

	if ((r = find_resource(head, ptr, cmp)) != NULL)
		r->data = NULL;
	else
		log_message(MSG_ERROR, "free_resource: No such Entry: %p\n",
		    ptr);
}
Esempio n. 6
0
static int lsmbus_write_byte(device_t dev, u8 address, u8 data)
{
	u16 device;
	struct resource *res;
	struct bus *pbus;

	device = dev->path.i2c.device;
	pbus = get_pbus_smbus(dev);
	res = find_resource(pbus->dev, 0x20);
	return do_smbus_write_byte(res->base, device, address, data);
}
Esempio n. 7
0
static void mcp55_sm_init(device_t dev)
{
#if CONFIG_GENERATE_ACPI_TABLES == 1
    struct resource *res;

    res = find_resource(dev, 0x60);

    if (res)
        pm_base = res->base;
#endif
}
Esempio n. 8
0
static int lsmbus_write_byte(device_t dev, uint8_t address, uint8_t data)
{
	uint16_t device;
	struct resource *res;
	struct bus *pbus;

	device = dev->path.i2c.device;
	pbus = get_pbus_smbus(dev);
	res = find_resource(pbus->dev, PCI_BASE_ADDRESS_4);
	return do_smbus_write_byte(res->base, device, address, data);
}
Esempio n. 9
0
void lpc_set_resources(struct device *dev)
{
	struct resource *res;

	pci_dev_set_resources(dev);

	/* Specical case. SPI Base Address. The SpiRomEnable should be set. */
	res = find_resource(dev, SPIROM_BASE_ADDRESS);
	pci_write_config32(dev, SPIROM_BASE_ADDRESS, res->base | 1 << 1);

}
Esempio n. 10
0
static void sb800_lpc_set_resources(struct device *dev)
{
	struct resource *res;

	pci_dev_set_resources(dev);

	/* Special case. SPI Base Address. The SpiRomEnable should be set. */
	res = find_resource(dev, 0xA0);
	pci_write_config32(dev, 0xA0, res->base | 1 << 1);

}
Esempio n. 11
0
static int lsmbus_write_byte(struct device *dev, u8 address, u8 data)
{
	u16 device;
	struct resource *res;
	struct bus *pbus;

	device = dev->path.i2c.device;
	pbus = get_pbus_smbus(dev);
	res = find_resource(pbus->dev, PCI_BASE_ADDRESS_4);
	return smbus_write8(res->base, device, address, data);
}
Esempio n. 12
0
static int lsmbus_block_read(device_t dev, u8 cmd, u8 bytes, u8 *buf)
{
	u16 device;
	struct resource *res;
	struct bus *pbus;

	device = dev->path.i2c.device;
	pbus = get_pbus_smbus(dev);
	res = find_resource(pbus->dev, 0x20);
	return do_smbus_block_read(res->base, device, cmd, bytes, buf);
}
Esempio n. 13
0
void load_rumoured_servers()
{
	struct string_t *filename = new_string_string(emergence_home_dir);
	
	#ifdef EMCLIENT
	string_cat_text(filename, "/rumoured.client");
	struct stat buf;
	if(stat(filename->text, &buf) == -1)
	{
		free_string(filename);
		filename = new_string_text(find_resource("rumoured.client"));
	}
	#endif
	
	#ifdef EMSERVER
	string_cat_text(filename, "/rumoured.server.");
	string_cat_int(filename, net_listen_port);
	#endif
	
	FILE *file = fopen(filename->text, "r");
	free_string(filename);
	
	if(!file)
		return;

//	flockfile(file);
	
	char *name = NULL;
	uint16_t port;
	struct server_t server;
	
	while(fscanf(file, "%a[^:]:%hu %u\n", &name, &port, (uint32_t*)&server.time) == 3)
	{
		int r = inet_pton(AF_INET, name, &server.ip);
		
		free(name);
		name = NULL;
		
		if(r <= 0)
			continue;
		
		server.port = htons(port);
		
		LL_ADD_TAIL(struct server_t, &rumoured_servers, &server);
	}
	
	if(name)
	{
		free(name);
		name = NULL;
	}
	
	fclose(file);
}
Esempio n. 14
0
int resman_add(struct resman *rman, const char *fname, void *data)
{
	int ridx;

	if((ridx = find_resource(rman, fname)) != -1) {
		return ridx;
	}

	/* resource not found, create a new one and start a loading job */
	return add_resource(rman, fname, data);
}
Esempio n. 15
0
unsigned long acpi_fill_madt(unsigned long current)
{
	unsigned int irq_start = 0;
	device_t dev = 0;
	struct resource* res = NULL;

	// SJM: Hard-code CPU LAPIC entries for now
	current += acpi_create_madt_lapic((acpi_madt_lapic_t *)current, 0, 0);
	current += acpi_create_madt_lapic((acpi_madt_lapic_t *)current, 1, 6);
	current += acpi_create_madt_lapic((acpi_madt_lapic_t *)current, 2, 1);
	current += acpi_create_madt_lapic((acpi_madt_lapic_t *)current, 3, 7);

	// Southbridge IOAPIC
	current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *)current, IOAPIC_ICH4, 0xfec00000, irq_start);
	irq_start += INTEL_IOAPIC_NUM_INTERRUPTS;

	// P64H2 Bus B IOAPIC
	dev = dev_find_slot(PCI_BUS_E7501_HI_B, PCI_DEVFN(28, 0));
	if (!dev)
		BUG();		// Config.lb error?
	res = find_resource(dev, PCI_BASE_ADDRESS_0);
	current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *)current, IOAPIC_P64H2_BUS_B, res->base, irq_start);
	irq_start += INTEL_IOAPIC_NUM_INTERRUPTS;

	// P64H2 Bus A IOAPIC
	dev = dev_find_slot(PCI_BUS_E7501_HI_B, PCI_DEVFN(30, 0));
	if (!dev)
		BUG();		// Config.lb error?
	res = find_resource(dev, PCI_BASE_ADDRESS_0);
	current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *)current, IOAPIC_P64H2_BUS_A, res->base, irq_start);
	irq_start += INTEL_IOAPIC_NUM_INTERRUPTS;


	// Map ISA IRQ 0 to IRQ 2
	current += acpi_create_madt_irqoverride((acpi_madt_irqoverride_t *)current, 1, 0, 2, 0);

	// IRQ9 differs from ISA standard - ours is active high, level-triggered
	current += acpi_create_madt_irqoverride((acpi_madt_irqoverride_t *)current, 0, 9, 9, 0xD);

	return current;
}
Esempio n. 16
0
void lpc_set_resources(struct device *dev)
{
	struct resource *res;

	printk(BIOS_DEBUG, "SB800 - Lpc.c - lpc_set_resources - Start.\n");
	pci_dev_set_resources(dev);

	/* Specical case. SPI Base Address. The SpiRomEnable should be set. */
	res = find_resource(dev, SPIROM_BASE_ADDRESS);
	pci_write_config32(dev, SPIROM_BASE_ADDRESS, res->base | 1 << 1);
	printk(BIOS_DEBUG, "SB800 - Lpc.c - lpc_set_resources - End.\n");
}
Esempio n. 17
0
static u32 get_sm_mmio(struct device *dev)
{
	struct resource *res;
	struct bus *pbus;

	pbus = get_pbus_smbus(dev);
	res = find_resource(pbus->dev, 0x90);
	if (res->base == SMB_BASE_ADDR)
		return SMBUS_MMIO_BASE;

	return ASF_MMIO_BASE;
}
Esempio n. 18
0
File: sm.c Progetto: XVilka/coreboot
static void sb600_sm_set_resources(struct device *dev)
{
	struct resource *res;
	u8 byte;

	pci_dev_set_resources(dev);

	/* rpr2.14: Make HPET MMIO decoding controlled by the memory enable bit in command register of LPC ISA bridge */
	byte = pm_ioread(0x52);
	byte |= 1 << 6;
	pm_iowrite(0x52, byte);

	res = find_resource(dev, 0x74);
	pci_write_config32(dev, 0x74, res->base | 1 << 3);

	res = find_resource(dev, 0x14);
	pci_write_config32(dev, 0x14, res->base);

	res = find_resource(dev, 0x10);
	pci_write_config32(dev, 0x10, res->base | 1);
}
Esempio n. 19
0
static int lsmbus_read_byte(device_t dev, u8 address)
{
	u16 device;
	struct resource *res;
	struct bus *pbus;

	device = dev->path.i2c.device;
	pbus = get_pbus_smbus(dev);
	res = find_resource(pbus->dev, PCI_BASE_ADDRESS_4);

	return do_smbus_read_byte(res->base, device, address);
}
Esempio n. 20
0
static void hudson_lpc_set_resources(struct device *dev)
{
	struct resource *res;

	/* Special case. SPI Base Address. The SpiRomEnable should STAY set. */
	res = find_resource(dev, SPIROM_BASE_ADDRESS_REGISTER);
	res->base |= PCI_COMMAND_MEMORY;

	pci_dev_set_resources(dev);


}
Esempio n. 21
0
static void sb700_sm_set_resources(struct device *dev)
{
	struct resource *res;
	u8 byte;

	pci_dev_set_resources(dev);
	res = find_resource(dev, 0x74);
	pci_write_config32(dev, 0x74, res->base | 1 << 3);

	/* TODO: test hpet */
#if 0	//rrg-2.0.3 shows BAR1 not used
	/* Make SMBUS BAR1(HPET base at offset 14h) visible */
	byte = pci_read_config8(dev, 0x43);
	byte &= ~(1 << 3);
	pci_write_config8(dev, 0x43, byte);
#endif

	res = find_resource(dev, 0xB4);
	/* Program HPET BAR Address */
	pci_write_config32(dev, 0xB4, res->base);

	/* Enable decoding of HPET MMIO, enable HPET MSI */
	byte = pci_read_config8(dev, 0x43);
	//byte |= (1 << 3); // Make SMBus Bar1 invisible
	//byte |= ((1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
	byte |= (1 << 4);
	pci_write_config8(dev, 0x43, byte);

	/* Enable HPET irq */
	byte = pci_read_config8(dev, 0x65);
	byte |= (1 << 2);
	pci_write_config8(dev, 0x65, byte);
	/* TODO: End of test hpet */

	res = find_resource(dev, PRIMARY_SMBUS_RESOURCE_NUMBER);
	pci_write_config32(dev, PRIMARY_SMBUS_RESOURCE_NUMBER, res->base | 1);

	res = find_resource(dev, AUXILIARY_SMBUS_RESOURCE_NUMBER);
	pci_write_config32(dev, AUXILIARY_SMBUS_RESOURCE_NUMBER, res->base | 1);
}
Esempio n. 22
0
static void azalia_init(struct device *dev)
{
#if IS_ENABLED(CONFIG_MCP55_USE_AZA)
	u8 *base;
	u32 codec_mask, reg32;
	struct resource *res;
	u8 reg8;

	/* Set bus master. */
	reg32 = pci_read_config32(dev, PCI_COMMAND);
	pci_write_config32(dev, PCI_COMMAND, reg32 | PCI_COMMAND_MASTER);

	pci_write_config8(dev, 0x3c, 0x0a); // TODO: Unused?

	reg8 = pci_read_config8(dev, 0x40);
	reg8 |= (1 << 3); /* Clear Clock Detect bit. */
	pci_write_config8(dev, 0x40, reg8);
	reg8 &= ~(1 << 3); /* Keep CLKDETCLR from clearing the bit over and over. */
	pci_write_config8(dev, 0x40, reg8);
	reg8 |= (1 << 2); /* Enable clock detection. */
	pci_write_config8(dev, 0x40, reg8);
	mdelay(1);
	reg8 = pci_read_config8(dev, 0x40);
	printk(BIOS_DEBUG, "Azalia: codec type: %s\n",
	       (reg8 & (1 << 1)) ? "Azalia" : "AC97");

	reg8 = pci_read_config8(dev, 0x40); /* Audio control */
	reg8 |= 1; /* Select Azalia mode. TODO: Control via devicetree.cb. */
	pci_write_config8(dev, 0x40, reg8);

	reg8 = pci_read_config8(dev, 0x4d); /* Docking status. */
	reg8 &= ~(1 << 7); /* Docking not supported. */
	pci_write_config8(dev, 0x4d, reg8);

	res = find_resource(dev, 0x10);
	if (!res)
		return;

	/*
	 * NOTE: This will break as soon as the Azalia gets a BAR above
	 * 4G. Is there anything we can do about it?
	 */
	base = res2mmio(res, 0, 0);
	printk(BIOS_DEBUG, "Azalia: base = %p\n", base);
	codec_mask = codec_detect(base);

	if (codec_mask) {
		printk(BIOS_DEBUG, "Azalia: codec_mask = %02x\n", codec_mask);
		codecs_init(dev, base, codec_mask);
	}
#endif
}
Esempio n. 23
0
static void usb2_init(struct device *dev)
{
        u32 base;
        struct resource *res;

        print_debug("USB 2.0 INIT:---------->\n");

//-------------- enable USB2.0 (SiS7002) -------------------------
{
        u8  temp8;
        int i=0;

        while(SiS_SiS7002_init[i][0] != 0)
        {
                temp8 = pci_read_config8(dev, SiS_SiS7002_init[i][0]);
                temp8 &= SiS_SiS7002_init[i][1];
                temp8 |= SiS_SiS7002_init[i][2];
                pci_write_config8(dev, SiS_SiS7002_init[i][0], temp8);
                i++;
        };
}

        res = find_resource(dev, 0x10);
        if(!res)
                return;

        base = res->base;
        printk(BIOS_DEBUG, "base = 0x%08x\n", base);
        write32(base+0x20, 0x2);
//-----------------------------------------------------------

#if DEBUG_USB2
{
        int i;

        print_debug("****** USB 2.0 PCI config ******");
        print_debug("\n    03020100  07060504  0B0A0908  0F0E0D0C");

        for(i=0;i<0xff;i+=4){
                if((i%16)==0){
                        print_debug("\n");
                        print_debug_hex8(i);
                        print_debug(": ");
                }
                print_debug_hex32(pci_read_config32(dev,i));
                print_debug("  ");
        }
        print_debug("\n");
}
#endif
        print_debug("USB 2.0 INIT:<----------\n");
}
Esempio n. 24
0
int allocate_resource(Resource_s * psRoot, Resource_s * psNew,
		      uint nSize, uint nMin, uint nMax, uint nAlign, 
		      void (* pfnAlign)(void * pData, Resource_s * psRes, uint nSize, uint nAlign),
		      void * pAlignData)
{
    int nErr;
    RWL_LOCK_RW(g_hResourceLock);
    nErr = find_resource(psRoot, psNew, nSize, nMin, nMax, nAlign, pfnAlign, pAlignData);
    if(nErr>=0 && __request_resource(psRoot, psNew))
	nErr = -EBUSY;
    RWL_UNLOCK_RW(g_hResourceLock);
    return nErr;
}
Esempio n. 25
0
static void pch_smbus_init(struct device *dev)
{
	struct resource *res;

	/* Enable clock gating */
	pci_update_config32(dev, 0x80,
		~((1 << 8) | (1 << 10) | (1 << 12) | (1 << 14)), 0);

	/* Set Receive Slave Address */
	res = find_resource(dev, PCI_BASE_ADDRESS_4);
	if (res)
		outb(SMBUS_SLAVE_ADDR, res->base + SMB_RCV_SLVA);
}
Esempio n. 26
0
static int lsmbus_write_byte(device_t dev, uint8_t address, uint8_t val)
{
    unsigned device;
    struct resource *res;
    struct bus *pbus;

    device = dev->path.i2c.device;
    pbus = get_pbus_smbus(dev);

    res = find_resource(pbus->dev, 0x20 + (pbus->link_num * 4));

    return do_smbus_write_byte(res->base, device, address, val);
}
Esempio n. 27
0
static int lsmbus_recv_byte(device_t dev)
{
    unsigned device;
    struct resource *res;
    struct bus *pbus;

    device = dev->path.i2c.device;
    pbus = get_pbus_smbus(dev);

    res = find_resource(pbus->dev, 0x20 + (pbus->link_num * 4));

    return do_smbus_recv_byte(res->base, device);
}
Esempio n. 28
0
File: sm.c Progetto: XVilka/coreboot
static int lsmbus_recv_byte(device_t dev)
{
	u32 device;
	struct resource *res;
	struct bus *pbus;

	device = dev->path.i2c.device;
	pbus = get_pbus_smbus(dev);

	res = find_resource(pbus->dev, 0x90);

	return do_smbus_recv_byte(res->base, device);
}
Esempio n. 29
0
static void iommu_set_resources(device_t dev)
{
	struct resource *res;

	pci_dev_set_resources(dev);

	res = find_resource(dev, 0x44);
	/* Remember this resource has been stored */
	res->flags |= IORESOURCE_STORED;
	/* For now, do only 32-bit space allocation */
	pci_write_config32(dev, 0x48, 0x0);
	pci_write_config32(dev, 0x44, res->base | (1 << 0));
}
Esempio n. 30
0
static int lsmbus_send_byte(device_t dev, uint8_t val)
{
        unsigned device;
        struct resource *res;
        struct bus *pbus;

        device = dev->path.i2c.device;
        pbus = get_pbus_smbus(dev);

        res = find_resource(pbus->dev, 0x90);

        return do_smbus_send_byte(res->base, device, val);
}