skvpd.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:8k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /******************************************************************************
  2.  *
  3.  * Name: skvpd.h
  4.  * Project: GEnesis, PCI Gigabit Ethernet Adapter
  5.  * Version: $Revision: 1.9 $
  6.  * Date: $Date: 1999/11/22 14:02:27 $
  7.  * Purpose: Defines and Macros for VPD handling
  8.  *
  9.  ******************************************************************************/
  10. /******************************************************************************
  11.  *
  12.  * (C)Copyright 1998,1999 SysKonnect,
  13.  * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
  14.  *
  15.  * This program is free software; you can redistribute it and/or modify
  16.  * it under the terms of the GNU General Public License as published by
  17.  * the Free Software Foundation; either version 2 of the License, or
  18.  * (at your option) any later version.
  19.  *
  20.  * The information in this file is provided "AS IS" without warranty.
  21.  *
  22.  ******************************************************************************/
  23. /******************************************************************************
  24.  *
  25.  * History:
  26.  *
  27.  * $Log: skvpd.h,v $
  28.  * Revision 1.9  1999/11/22 14:02:27  cgoos
  29.  * Changed license header to GPL.
  30.  *
  31.  * Revision 1.8  1999/03/11 14:26:40  malthoff
  32.  * Replace __STDC__ with SK_KR_PROTO.
  33.  *
  34.  * Revision 1.7  1998/10/28 07:27:17  gklug
  35.  * rmv: SWAP macros
  36.  * add: VPD_IN/OUT8 macros
  37.  * chg: interface definition
  38.  *
  39.  * Revision 1.6  1998/10/22 10:03:44  gklug
  40.  * fix: use SK_OUT16 instead of SK_OUTW
  41.  *
  42.  * Revision 1.5  1998/10/14 07:05:31  cgoos
  43.  * Changed constants in SK_SWAP_32 to UL.
  44.  *
  45.  * Revision 1.4  1998/08/19 08:14:09  gklug
  46.  * fix: remove struct keyword as much as possible from the c-code (see CCC)
  47.  *
  48.  * Revision 1.3  1998/08/18 08:18:56  malthoff
  49.  * Modify VPD in and out macros for SK_DIAG
  50.  *
  51.  * Revision 1.2  1998/07/03 14:49:08  malthoff
  52.  * Add VPD_INxx() and VPD_OUTxx() macros for the Diagnostics tool.
  53.  *
  54.  * Revision 1.1  1998/06/19 14:08:03  malthoff
  55.  * Created.
  56.  *
  57.  *
  58.  ******************************************************************************/
  59. /*
  60.  * skvpd.h contains Diagnostic specific defines for VPD handling
  61.  */
  62. #ifndef __INC_SKVPD_H_
  63. #define __INC_SKVPD_H_
  64. /*
  65.  * Define Resource Type Identifiers and VPD keywords
  66.  */
  67. #define RES_ID 0x82 /* Resource Type ID String (Product Name) */
  68. #define RES_VPD_R 0x90 /* start of VPD read only area */
  69. #define RES_VPD_W 0x91 /* start of VPD read/write area */
  70. #define RES_END 0x78 /* Resource Type End Tag */
  71. #ifndef VPD_NAME
  72. #define VPD_NAME "Name" /* Product Name, VPD name of RES_ID */
  73. #endif /* VPD_NAME */
  74. #define VPD_PN "PN" /* Adapter Part Number */
  75. #define VPD_EC "EC" /* Adapter Engineering Level */
  76. #define VPD_MN "MN" /* Manufacture ID */
  77. #define VPD_SN "SN" /* Serial Number */
  78. #define VPD_CP "CP" /* Extended Capability */
  79. #define VPD_RV "RV" /* Checksum and Reserved */
  80. #define VPD_YA "YA" /* Asset Tag Identifier */
  81. #define VPD_VL "VL" /* First Error Log Message (SK specific) */
  82. #define VPD_VF "VF" /* Second Error Log Message (SK specific) */
  83. #define VPD_RW "RW" /* Remaining Read / Write Area */
  84. /* 'type' values for vpd_setup_para() */
  85. #define VPD_RO_KEY 1 /* RO keys are "PN", "EC", "MN", "SN", "RV" */
  86. #define VPD_RW_KEY 2 /* RW keys are "Yx", "Vx", and "RW" */
  87. /* 'op' values for vpd_setup_para() */
  88. #define ADD_KEY 1 /* add the key at the pos "RV" or "RW" */
  89. #define OWR_KEY 2 /* overwrite key if already exists */
  90. /*
  91.  * Define READ and WRITE Constants.
  92.  */
  93. #define VPD_SIZE 512
  94. #define VPD_READ 0x0000
  95. #define VPD_WRITE 0x8000
  96. #define VPD_STOP(pAC,IoC) VPD_OUT16(pAC,IoC,PCI_VPD_ADR_REG,VPD_WRITE)
  97. #define VPD_GET_RES_LEN(p) ((unsigned int) 
  98. (* (SK_U8 *)&(p)[1]) |
  99. ((* (SK_U8 *)&(p)[2]) << 8))
  100. #define VPD_GET_VPD_LEN(p) ((unsigned int)(* (SK_U8 *)&(p)[2]))
  101. #define VPD_GET_VAL(p) ((char *)&(p)[3])
  102. #define VPD_MAX_LEN 50
  103. /* VPD status */
  104. /* bit 7..1 reserved */
  105. #define VPD_VALID (1<<0) /* VPD data buffer, vpd_free_ro, */
  106. /* and vpd_free_rw valid  */
  107. /*
  108.  * VPD structs
  109.  */
  110. typedef struct s_vpd_status {
  111. unsigned short vpd_status ; /* VPD status, description see above */
  112. int vpd_free_ro ; /* unused bytes in read only area */
  113. int vpd_free_rw ; /* bytes available in read/write area */
  114. } SK_VPD_STATUS;
  115. typedef struct s_vpd {
  116. SK_VPD_STATUS v ; /* VPD status structure */
  117. char vpd_buf[VPD_SIZE] ; /* VPD buffer */
  118. } SK_VPD;
  119. typedef struct s_vpd_para {
  120. unsigned int p_len ; /* parameter length */
  121. char *p_val ; /* points to the value */
  122. } SK_VPD_PARA;
  123. /*
  124.  * structure of Large Resource Type Identifiers
  125.  */
  126. /* was removed, because of alignment problems */
  127. /*
  128.  * sturcture of VPD keywords
  129.  */
  130. typedef struct s_vpd_key {
  131. char p_key[2] ; /* 2 bytes ID string */
  132. unsigned char p_len ; /* 1 byte length */
  133. char p_val ; /* start of the value string */
  134. } SK_VPD_KEY;
  135. /*
  136.  * System specific VPD macros
  137.  */
  138. #ifndef SKDIAG
  139. #ifndef VPD_DO_IO
  140. #define VPD_OUT8(pAC,IoC,Addr,Val) (void)SkPciWriteCfgByte(pAC,Addr,Val)
  141. #define VPD_OUT16(pAC,IoC,Addr,Val) (void)SkPciWriteCfgWord(pAC,Addr,Val)
  142. #define VPD_OUT32(pAC,IoC,Addr,Val) (void)SkPciWriteCfgDWord(pAC,Addr,Val)
  143. #define VPD_IN8(pAC,IoC,Addr,pVal) (void)SkPciReadCfgByte(pAC,Addr,pVal)
  144. #define VPD_IN16(pAC,IoC,Addr,pVal) (void)SkPciReadCfgWord(pAC,Addr,pVal)
  145. #define VPD_IN32(pAC,IoC,Addr,pVal) (void)SkPciReadCfgDWord(pAC,Addr,pVal)
  146. #else /* VPD_DO_IO */
  147. #define VPD_OUT8(pAC,IoC,Addr,Val) SK_OUT8(IoC,PCI_C(Addr),Val)
  148. #define VPD_OUT16(pAC,IoC,Addr,Val) SK_OUT16(IoC,PCI_C(Addr),Val)
  149. #define VPD_OUT32(pAC,IoC,Addr,Val) SK_OUT32(IoC,PCI_C(Addr),Val)
  150. #define VPD_IN8(pAC,IoC,Addr,pVal) SK_IN8(IoC,PCI_C(Addr),pVal)
  151. #define VPD_IN16(pAC,IoC,Addr,pVal) SK_IN16(IoC,PCI_C(Addr),pVal)
  152. #define VPD_IN32(pAC,IoC,Addr,pVal) SK_IN32(IoC,PCI_C(Addr),pVal)
  153. #endif /* VPD_DO_IO */
  154. #else /* SKDIAG */
  155. #define VPD_OUT8(pAC,Ioc,Addr,Val) {
  156. if ((pAC)->DgT.DgUseCfgCycle)
  157. SkPciWriteCfgByte(pAC,Addr,Val) ;
  158. else
  159. SK_OUT8(pAC,PCI_C(Addr),Val);
  160. }
  161. #define VPD_OUT16(pAC,Ioc,Addr,Val) {
  162. if ((pAC)->DgT.DgUseCfgCycle)
  163. SkPciWriteCfgWord(pAC,Addr,Val) ;
  164. else
  165. SK_OUT16(pAC,PCI_C(Addr),Val);
  166. }
  167. #define VPD_OUT32(pAC,Ioc,Addr,Val) {
  168. if ((pAC)->DgT.DgUseCfgCycle)
  169. SkPciWriteCfgDWord(pAC,Addr,Val) ;
  170. else
  171. SK_OUT32(pAC,PCI_C(Addr),Val); 
  172. }
  173. #define VPD_IN8(pAC,Ioc,Addr,pVal) {
  174. if ((pAC)->DgT.DgUseCfgCycle) 
  175. SkPciReadCfgByte(pAC,Addr,pVal) ;
  176. else
  177. SK_IN8(pAC,PCI_C(Addr),pVal); 
  178. }
  179. #define VPD_IN16(pAC,Ioc,Addr,pVal) {
  180. if ((pAC)->DgT.DgUseCfgCycle) 
  181. SkPciReadCfgWord(pAC,Addr,pVal) ;
  182. else
  183. SK_IN16(pAC,PCI_C(Addr),pVal); 
  184. }
  185. #define VPD_IN32(pAC,Ioc,Addr,pVal) {
  186. if ((pAC)->DgT.DgUseCfgCycle)
  187. SkPciReadCfgDWord(pAC,Addr,pVal) ;
  188. else
  189. SK_IN32(pAC,PCI_C(Addr),pVal);
  190. }
  191. #endif /* nSKDIAG */
  192. /* function prototypes ********************************************************/
  193. #ifndef SK_KR_PROTO
  194. extern SK_U32 VpdReadDWord(
  195. SK_AC *pAC,
  196. SK_IOC IoC,
  197. int addr) ;
  198. extern int VpdSetupPara(
  199. SK_AC *pAC,
  200. char *key,
  201. char *buf,
  202. int len,
  203. int type,
  204. int op) ;
  205. extern SK_VPD_STATUS *VpdStat(
  206. SK_AC *pAC,
  207. SK_IOC IoC) ;
  208. extern int VpdKeys(
  209. SK_AC *pAC,
  210. SK_IOC IoC,
  211. char *buf,
  212. int *len,
  213. int *elements) ;
  214. extern int VpdRead(
  215. SK_AC *pAC,
  216. SK_IOC IoC,
  217. char *key,
  218. char *buf,
  219. int *len) ;
  220. extern SK_BOOL VpdMayWrite(
  221. char *key) ;
  222. extern int VpdWrite(
  223. SK_AC *pAC,
  224. SK_IOC IoC,
  225. char *key,
  226. char *buf) ;
  227. extern int VpdDelete(
  228. SK_AC *pAC,
  229. SK_IOC IoC,
  230. char *key) ;
  231. extern int VpdUpdate(
  232. SK_AC *pAC,
  233. SK_IOC IoC);
  234. extern void VpdErrLog(
  235. SK_AC *pAC,
  236. SK_IOC IoC,
  237. char *msg) ;
  238. #ifdef SKDIAG
  239. extern int VpdReadBlock(
  240. SK_AC *pAC,
  241. SK_IOC IoC,
  242. char *buf,
  243. int addr,
  244. int len) ;
  245. extern int VpdWriteBlock(
  246. SK_AC *pAC,
  247. SK_IOC IoC,
  248. char *buf,
  249. int addr,
  250. int len) ;
  251. #endif /* SKDIAG */
  252. #else /* SK_KR_PROTO */
  253. extern SK_U32 VpdReadDWord() ;
  254. extern int VpdSetupPara() ;
  255. extern SK_VPD_STATUS *VpdStat() ;
  256. extern int VpdKeys() ;
  257. extern int VpdRead() ;
  258. extern SK_BOOL VpdMayWrite() ;
  259. extern int VpdWrite() ;
  260. extern int VpdDelete() ;
  261. extern int VpdUpdate() ;
  262. extern void VpdErrLog() ;
  263. #endif /* SK_KR_PROTO */
  264. #endif /* __INC_SKVPD_H_ */