diff options
Diffstat (limited to 'include/linux/bcma/bcma.h')
| -rw-r--r-- | include/linux/bcma/bcma.h | 224 | 
1 files changed, 224 insertions, 0 deletions
diff --git a/include/linux/bcma/bcma.h b/include/linux/bcma/bcma.h new file mode 100644 index 00000000000..08763e4e848 --- /dev/null +++ b/include/linux/bcma/bcma.h @@ -0,0 +1,224 @@ +#ifndef LINUX_BCMA_H_ +#define LINUX_BCMA_H_ + +#include <linux/pci.h> +#include <linux/mod_devicetable.h> + +#include <linux/bcma/bcma_driver_chipcommon.h> +#include <linux/bcma/bcma_driver_pci.h> + +#include "bcma_regs.h" + +struct bcma_device; +struct bcma_bus; + +enum bcma_hosttype { +	BCMA_HOSTTYPE_NONE, +	BCMA_HOSTTYPE_PCI, +	BCMA_HOSTTYPE_SDIO, +}; + +struct bcma_chipinfo { +	u16 id; +	u8 rev; +	u8 pkg; +}; + +struct bcma_host_ops { +	u8 (*read8)(struct bcma_device *core, u16 offset); +	u16 (*read16)(struct bcma_device *core, u16 offset); +	u32 (*read32)(struct bcma_device *core, u16 offset); +	void (*write8)(struct bcma_device *core, u16 offset, u8 value); +	void (*write16)(struct bcma_device *core, u16 offset, u16 value); +	void (*write32)(struct bcma_device *core, u16 offset, u32 value); +	/* Agent ops */ +	u32 (*aread32)(struct bcma_device *core, u16 offset); +	void (*awrite32)(struct bcma_device *core, u16 offset, u32 value); +}; + +/* Core manufacturers */ +#define BCMA_MANUF_ARM			0x43B +#define BCMA_MANUF_MIPS			0x4A7 +#define BCMA_MANUF_BCM			0x4BF + +/* Core class values. */ +#define BCMA_CL_SIM			0x0 +#define BCMA_CL_EROM			0x1 +#define BCMA_CL_CORESIGHT		0x9 +#define BCMA_CL_VERIF			0xB +#define BCMA_CL_OPTIMO			0xD +#define BCMA_CL_GEN			0xE +#define BCMA_CL_PRIMECELL		0xF + +/* Core-ID values. */ +#define BCMA_CORE_OOB_ROUTER		0x367	/* Out of band */ +#define BCMA_CORE_INVALID		0x700 +#define BCMA_CORE_CHIPCOMMON		0x800 +#define BCMA_CORE_ILINE20		0x801 +#define BCMA_CORE_SRAM			0x802 +#define BCMA_CORE_SDRAM			0x803 +#define BCMA_CORE_PCI			0x804 +#define BCMA_CORE_MIPS			0x805 +#define BCMA_CORE_ETHERNET		0x806 +#define BCMA_CORE_V90			0x807 +#define BCMA_CORE_USB11_HOSTDEV		0x808 +#define BCMA_CORE_ADSL			0x809 +#define BCMA_CORE_ILINE100		0x80A +#define BCMA_CORE_IPSEC			0x80B +#define BCMA_CORE_UTOPIA		0x80C +#define BCMA_CORE_PCMCIA		0x80D +#define BCMA_CORE_INTERNAL_MEM		0x80E +#define BCMA_CORE_MEMC_SDRAM		0x80F +#define BCMA_CORE_OFDM			0x810 +#define BCMA_CORE_EXTIF			0x811 +#define BCMA_CORE_80211			0x812 +#define BCMA_CORE_PHY_A			0x813 +#define BCMA_CORE_PHY_B			0x814 +#define BCMA_CORE_PHY_G			0x815 +#define BCMA_CORE_MIPS_3302		0x816 +#define BCMA_CORE_USB11_HOST		0x817 +#define BCMA_CORE_USB11_DEV		0x818 +#define BCMA_CORE_USB20_HOST		0x819 +#define BCMA_CORE_USB20_DEV		0x81A +#define BCMA_CORE_SDIO_HOST		0x81B +#define BCMA_CORE_ROBOSWITCH		0x81C +#define BCMA_CORE_PARA_ATA		0x81D +#define BCMA_CORE_SATA_XORDMA		0x81E +#define BCMA_CORE_ETHERNET_GBIT		0x81F +#define BCMA_CORE_PCIE			0x820 +#define BCMA_CORE_PHY_N			0x821 +#define BCMA_CORE_SRAM_CTL		0x822 +#define BCMA_CORE_MINI_MACPHY		0x823 +#define BCMA_CORE_ARM_1176		0x824 +#define BCMA_CORE_ARM_7TDMI		0x825 +#define BCMA_CORE_PHY_LP		0x826 +#define BCMA_CORE_PMU			0x827 +#define BCMA_CORE_PHY_SSN		0x828 +#define BCMA_CORE_SDIO_DEV		0x829 +#define BCMA_CORE_ARM_CM3		0x82A +#define BCMA_CORE_PHY_HT		0x82B +#define BCMA_CORE_MIPS_74K		0x82C +#define BCMA_CORE_MAC_GBIT		0x82D +#define BCMA_CORE_DDR12_MEM_CTL		0x82E +#define BCMA_CORE_PCIE_RC		0x82F	/* PCIe Root Complex */ +#define BCMA_CORE_OCP_OCP_BRIDGE	0x830 +#define BCMA_CORE_SHARED_COMMON		0x831 +#define BCMA_CORE_OCP_AHB_BRIDGE	0x832 +#define BCMA_CORE_SPI_HOST		0x833 +#define BCMA_CORE_I2S			0x834 +#define BCMA_CORE_SDR_DDR1_MEM_CTL	0x835	/* SDR/DDR1 memory controller core */ +#define BCMA_CORE_SHIM			0x837	/* SHIM component in ubus/6362 */ +#define BCMA_CORE_DEFAULT		0xFFF + +#define BCMA_MAX_NR_CORES		16 + +struct bcma_device { +	struct bcma_bus *bus; +	struct bcma_device_id id; + +	struct device dev; +	bool dev_registered; + +	u8 core_index; + +	u32 addr; +	u32 wrap; + +	void *drvdata; +	struct list_head list; +}; + +static inline void *bcma_get_drvdata(struct bcma_device *core) +{ +	return core->drvdata; +} +static inline void bcma_set_drvdata(struct bcma_device *core, void *drvdata) +{ +	core->drvdata = drvdata; +} + +struct bcma_driver { +	const char *name; +	const struct bcma_device_id *id_table; + +	int (*probe)(struct bcma_device *dev); +	void (*remove)(struct bcma_device *dev); +	int (*suspend)(struct bcma_device *dev, pm_message_t state); +	int (*resume)(struct bcma_device *dev); +	void (*shutdown)(struct bcma_device *dev); + +	struct device_driver drv; +}; +extern +int __bcma_driver_register(struct bcma_driver *drv, struct module *owner); +static inline int bcma_driver_register(struct bcma_driver *drv) +{ +	return __bcma_driver_register(drv, THIS_MODULE); +} +extern void bcma_driver_unregister(struct bcma_driver *drv); + +struct bcma_bus { +	/* The MMIO area. */ +	void __iomem *mmio; + +	const struct bcma_host_ops *ops; + +	enum bcma_hosttype hosttype; +	union { +		/* Pointer to the PCI bus (only for BCMA_HOSTTYPE_PCI) */ +		struct pci_dev *host_pci; +		/* Pointer to the SDIO device (only for BCMA_HOSTTYPE_SDIO) */ +		struct sdio_func *host_sdio; +	}; + +	struct bcma_chipinfo chipinfo; + +	struct bcma_device *mapped_core; +	struct list_head cores; +	u8 nr_cores; + +	struct bcma_drv_cc drv_cc; +	struct bcma_drv_pci drv_pci; +}; + +extern inline u32 bcma_read8(struct bcma_device *core, u16 offset) +{ +	return core->bus->ops->read8(core, offset); +} +extern inline u32 bcma_read16(struct bcma_device *core, u16 offset) +{ +	return core->bus->ops->read16(core, offset); +} +extern inline u32 bcma_read32(struct bcma_device *core, u16 offset) +{ +	return core->bus->ops->read32(core, offset); +} +extern inline +void bcma_write8(struct bcma_device *core, u16 offset, u32 value) +{ +	core->bus->ops->write8(core, offset, value); +} +extern inline +void bcma_write16(struct bcma_device *core, u16 offset, u32 value) +{ +	core->bus->ops->write16(core, offset, value); +} +extern inline +void bcma_write32(struct bcma_device *core, u16 offset, u32 value) +{ +	core->bus->ops->write32(core, offset, value); +} +extern inline u32 bcma_aread32(struct bcma_device *core, u16 offset) +{ +	return core->bus->ops->aread32(core, offset); +} +extern inline +void bcma_awrite32(struct bcma_device *core, u16 offset, u32 value) +{ +	core->bus->ops->awrite32(core, offset, value); +} + +extern bool bcma_core_is_enabled(struct bcma_device *core); +extern int bcma_core_enable(struct bcma_device *core, u32 flags); + +#endif /* LINUX_BCMA_H_ */  |