Date: Tue, 5 Apr 2011 01:42:06 +0000 (UTC) From: Marcel Moolenaar <marcel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r220348 - projects/altix/sys/ia64/include Message-ID: <201104050142.p351g607001600@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: marcel Date: Tue Apr 5 01:42:06 2011 New Revision: 220348 URL: http://svn.freebsd.org/changeset/base/220348 Log: o Define a geoid structure to make it easier to extract the components. o Re-define some of the fwbus fields. They don't seem to be defined by the PROM. o Add structures for the KLCONFIG data, constructed by the firmware during hardware discovery. Modified: projects/altix/sys/ia64/include/sgisn.h Modified: projects/altix/sys/ia64/include/sgisn.h ============================================================================== --- projects/altix/sys/ia64/include/sgisn.h Mon Apr 4 22:56:33 2011 (r220347) +++ projects/altix/sys/ia64/include/sgisn.h Tue Apr 5 01:42:06 2011 (r220348) @@ -29,7 +29,7 @@ #define _MACHINE_SGISN_H_ /* SAL functions */ -#define SAL_SGISN_KLCONFIG_ADDR 0x02000005 +#define SAL_SGISN_KLCFG_ADDR 0x02000005 #define SAL_SGISN_SAPIC_INFO 0x0200001d #define SAL_SGISN_SN_INFO 0x0200001e #define SAL_SGISN_PUTC 0x02000021 @@ -42,24 +42,6 @@ #define SAL_SGISN_FEATURE_GET_PROM 0x02000065 #define SAL_SGISN_FEATURE_SET_OS 0x02000066 -#define SGISN_GEOID_MODULE(id) (((id) >> 0) & 0xffffffffu) -#define SGISN_GEOID_TYPE(id) (((id) >> 32) & 0xff) -#define SGISN_GEOID_SLAB(id) (((id) >> 40) & 0xff) -#define SGISN_GEOID_ADDIT(id) (((id) >> 48) & 0xffff); -#define SGISN_GEOID_CPU_SLICE(id) ((SGISN_GEOID_ADDIT(id) >> 0) & 0xff) -#define SGISN_GEOID_DEV_BUS(id) ((SGISN_GEOID_ADDIT(id) >> 0) & 0xff) -#define SGISN_GEOID_DEV_SLOT(id) ((SGISN_GEOID_ADDIT(id) >> 8) & 0xff) -#define SGISN_GEOID_MEM_BUS(id) ((SGISN_GEOID_ADDIT(id) >> 0) & 0xff) -#define SGISN_GEOID_MEM_SLOT(id) ((SGISN_GEOID_ADDIT(id) >> 8) & 0xff) - -#define SGISN_GEO_TYPE_INVALID 0 -#define SGISN_GEO_TYPE_MODULE 1 -#define SGISN_GEO_TYPE_NODE 2 -#define SGISN_GEO_TYPE_RTR 3 -#define SGISN_GEO_TYPE_IOC 4 -#define SGISN_GEO_TYPE_DEV 5 /* PCI device */ -#define SGISN_GEO_TYPE_CPU 6 -#define SGISN_GEO_TYPE_MEM 7 #define SGISN_HUB_NITTES 8 #define SGISN_HUB_NWIDGETS 16 @@ -67,6 +49,34 @@ #define SHUB_IVAR_PCIBUS 1 #define SHUB_IVAR_PCISEG 2 +struct sgisn_geoid { + uint32_t sg_module; + uint8_t sg_type; +#define SGISN_GEOID_TYPE_INVALID 0 +#define SGISN_GEOID_TYPE_MODULE 1 +#define SGISN_GEOID_TYPE_NODE 2 +#define SGISN_GEOID_TYPE_RTR 3 +#define SGISN_GEOID_TYPE_IOC 4 +#define SGISN_GEOID_TYPE_DEV 5 /* PCI device */ +#define SGISN_GEOID_TYPE_CPU 6 +#define SGISN_GEOID_TYPE_MEM 7 + uint8_t sg_slab:4; + uint8_t sg_slot:4; + union { + struct { + uint8_t slice; + } cpu; + struct { + uint8_t bus; + uint8_t slot; + } dev; + struct { + uint8_t bus; + uint8_t slot; + } mem; + } sg_u; +}; + struct sgisn_fwhub; struct sgisn_widget { @@ -92,7 +102,7 @@ struct sgisn_fwbus { }; struct sgisn_fwhub { - uint64_t hub_geoid; + struct sgisn_geoid hub_geoid; uint16_t hub_nasid; uint16_t hub_peer_nasid; uint32_t _pad; @@ -130,10 +140,81 @@ struct sgisn_fwdev { uint64_t dev_bar[6]; uint64_t dev_romaddr; uint64_t dev_handle; - struct sgisn_fwbus *dev_bus_softc; - struct sgisn_fwdev *dev_parent; - void *dev_os_devptr; + uint64_t dev_os_private[3]; struct sgisn_fwirq *dev_irq; + uint64_t dev_xxx[4]; +}; + +/* + * KLCFG stuff... + */ + +static __inline void * +sgisn_klcfg_ptr(uint64_t base, int32_t ofs) +{ + void *ptr; + + ptr = (void *)IA64_PHYS_TO_RR7(base + ofs); + return (ptr); +} + +struct sgisn_klcfg_hdr { + uint64_t skh_magic; +#define SGISN_KLCFG_MAGIC 0xbeedbabe + uint32_t skh_version; + int32_t skh_ofs_mallocs; + int32_t skh_ofs_console; + int32_t skh_board_info; + /* more fields here. */ +}; + +struct sgisn_klcfg_board { + int32_t skb_next; + uint8_t skb_affinity; /* local or remote */ +#define SGISN_KLCFG_BOARD_TYPE_LOCAL 1 +#define SGISN_KLCFG_BOARD_TYPE_REMOTE 2 + uint8_t skb_type; + uint8_t skb_version; /* structure version */ + uint8_t skb_revision; /* board revision */ + uint8_t skb_promver; + uint8_t skb_flags; + uint8_t skb_slot; + uint16_t skb_dbgsw; + struct sgisn_geoid skb_geoid; + int8_t skb_partition; + uint16_t skb_diag[4]; /* xxx */ + uint8_t skb_inventory; + uint8_t skb_ncompts; + uint64_t skb_nic; + int16_t skb_nasid; + int32_t skb_compts[24]; + int32_t skb_errinfo; + int32_t skb_parent; + uint32_t _pad1; + uint8_t skb_badness; + int16_t skb_owner; + uint8_t skb_nicflags; + uint8_t _pad2[28]; + char skb_name[32]; + int16_t skb_peer_host; + int32_t skb_peer; +}; + +struct sgisn_klcfg_compt { + uint8_t skc_type; + uint8_t skc_version; + uint8_t skc_flags; + uint8_t skc_revision; + uint16_t skc_diag[2]; + uint8_t skc_inventory; + uint16_t skc_partid; + uint64_t skc_nic; + uint8_t skc_physid; + uint32_t skc_virtid; + uint8_t skc_wdgtid; + int16_t skc_nasid; + uint64_t skc_data; + int32_t skc_errinfo; }; #endif /* !_MACHINE_SGISN_H_ */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104050142.p351g607001600>