SSRSPEC.TXT Driver File Contents (CardAssistant1_3.zip)

	Shared Software Requierments (Interface Specification)
 		$Revision: 1.24 $ $Date: 1999/01/27 14:35:21 $


CONTENTS
========

1)	Purpose
2)	Include Order and Common Data Base Definition
3)	Module Dependencies
4)	Define Description
5)	Variable and Structure Description
6)	Function Description
7)	History
***


(1) PURPOSE
===========

	This document describes all defines, variables and functions
	required by shared software modules.
***


(2) INCLUDE ORDER AND COMMON DATA BASE DEFINITION
=================================================

Sample 'C' File (shared source):

#include "h/skdrv1st.h"		/* Driver Specific Definitions */
#include "h/sktypes.h"		/* Type Definitions */
#include ".../..."		/* All header files required by this 'C' file*/
#include ".../..."		/* only, has to be included now */
#include "h/skdrv2nd.h"		/* Adapter Control- and Driver specific Def. */
---

skdrv1st.h:

typedef	struct s_AC	SK_AC;

#include <...>			/* System specific includes if required */
#include "h/skerror.h"		/* Include defines for Error log base/class */
#include "h/skdebug.h"		/* Include defines for debug macros */
				/* Note: If sktypes.h is needed in skdrv1st.h */
				/* 	 it should be included there also (RA)*/

#define ...			/* Driver Specific Definitions */
----

skdrv2nd.h:

#include "h/skrlmt.h"		/* The RLMT module is mandatory */
#include "h/skvpd.h"		/* other modules may be included if required */
#include "h/sk..?"

#include ".../..."		/* Driver specific header files */

struct s_AC {
	SK_ ...;		/* Driver specific structure definitions */

	SK_VPD	vpd;		/* Module specific structures if required */
};


#define	SK_IOC		...	/* Define the type of the IO context */
---
***


(3) MODULE DEPENDENCIES
=======================

Module:		HwInit (skgeinit.c)
Req. Defines:	SK_MAX_MACS
		SK_USE_REV_DESC (required if descriptor reversal feature used)
Req. Vars:	-
Req. Functions: SkPciWriteCfgWord()	


Module:		VPD (skvpd.c)
Req. Defines:	SK_TICKS_PER_SEC
		SK_MEMCPY(), SK_MEMCMP()
Req. Vars:	-
Req. Functions:	SkOsGetTime(),					(Always)

		SkPciReadCfgWord(), SkPciReadCfgDWord(),	(if VPD_DO_IO)
		SkPciWriteCfgWord(), SkPciWriteCfgDWord()	(is not def. )

Module:		ADDR (skaddr.c)
Req. Defines:	SK_MAX_MACS
Req. Vars:	-
Req. Functions: -	

Module:		HwInit (skrlmt.c)
Req. Defines:	SK_MAX_MACS
Req. Types	SK_MBUF
	In skdrv1st.h:
		typedef struct s_SkMbuf SK_MBUF;
	In skdrv2nd.h:
		struct s_SkMbuf {
			/* Common fields */
			SK_MBUF		*pNext;
			SK_U8		*pData;	/* Data buffer. */
			unsigned	Size;	/* Data buffer size. */
			unsigned	Length;	/* Length of packet (<= Size). */
			SK_U32		PortIdx;/* Receiving/transmitting port. */
			#ifdef SK_RLMT_MBUF_PRIVATE
			SK_RLMT_MBUF Rlmt;   /* Private fields for RLMT. */
			#endif    /* SK_RLMT_MBUF_PRIVATE */
			/* OS-specific fields, e.g. void *pOS; */
		};

Req. Vars:	-
Req. Functions: -	
***


(4) DEFINE DESCRIPTION
======================

SK_BIG_ENDIAN		... must be defined if the byte order is
			big endian.
			File:	skdrv1st.h
			sample: #define SK_BIG_ENDIAN

SK_LITTLE_ENDIAN	... must be defined if the byte order is
			little endian.
			File:	skdrv1st.h
			sample: #define SK_LITTLE_ENDIAN

SK_TICKS_PER_SEC	... is defined as count of timer ticks per second.
			File:	skdrv1st.h
			sample: #define SK_TICKS_PER_SEC	SK_CONSTU64(100)

SK_MEM_MAPPED_IO	...should be defined if the driver uses
			mem mapped IO.
			File:	skdrv1st.h
			sample:	#define SK_MEM_MAPPED_IO

SK_MAX_MACS		...is the maximum number of MACs supported by
			the driver (per adapter).
			File:	skdrv1st.h
			sample:	#define SK_MAX_MACS	2

SK_IOC			... is the type of the IO context
			It needs to be defined by every driver. For the
			common sources this IoC (IO context) must be used
			to access the adapter via IOs. In addition every
			function which uses IOs or which calls a function
			that uses IOs must have IoC in its parameter list.
			(SK_IOC IoC)

			Standard Library Defines
SK_MEMCMP(pDest,pSrc,N)		it's like memcmp(pDest, pSrc, N)
SK_MEMCPY(pDest,pSrc,N)		it's like memcpy(pDest, pSrc, N)
SK_MEMSET(pDest,Val,N)		it's like memset(pDest, Val, N)
SK_STRNCPY(pDest,pSrc,N)	it's like strncpy(pDest, pSrc, N)
SK_STRLEN(pSrc)			it's like strlen(pSrc)
SK_STRCMP(pSrc1,pSrc2)		it's like strcmp(pSrc1, pSrc2)

/* macros to accesss the adapter */

SK_IN8(IoC,Addr,pVal)	...to read a 8-bit word from the adapter's target
SK_IN16(IoC,Addr,pVal)	...to read a 16-bit word from the adapter's target
SK_IN32(IoC,Addr,pVal)	...to read a 32-bit word from the adapter's target
SK_OUT8(IoC,Addr,Val)	...to write a 8-bit word to the adapter's target
SK_OUT16(IoC,Addr,Val)	...to write a 16-bit word to the adapter's target
SK_OUT32(IoC,Addr,Val)	...to write a 32-bit word to the adapter's target

	parameters:	IoC	IO context which is specific to the OS. IoC
				must be of the type SK_IOC
			Addr	register offset to access
			(p)Val	Value or pointer to the value which should
				be read or written
	Note:		SK_INxx and SK_OUTxx macros are also responsible
			for Little- or Big Endian conversion if required.
	example:

/* Define the IO context type. Usually it is the adapter's context */
#ifndef	SK_IOC
#define	SK_IOC		SK_AC *
#endif

#ifndef SK_MEM_MAPPED_IO
#define SET_RAP(Base,Val)	{\
	if ((Val)>0x80) outp((unsigned)((Base)+B0_RAP), (SK_U8)((Val)>>7)); }
	
#define	SK_IN8(pAC,Addr,pVal)	{	\
	SET_RAP((pAC)->hw.iop, Addr);	\
	*(pVal) = (SK_U8) inp((unsigned)SK_ADDR((pAC)->hw.iop, Addr)); }

#define	SK_OUT8(pAC,Addr,Val)	{	\
	SET_RAP((pAC)->hw.iop, Addr);	\
	outp((unsigned)SK_ADDR((pAC)->hw.iop, Addr), Val); }
#else
#define	SK_IN8(pAC,Addr,pVal)	(*(pVal) = *((SK_U8 volatile far *)	\
					((pAC)->Hw.Iop + (Addr))))
#define	SK_OUT8(pAC,Addr,Val)	(*((SK_U8 volatile far *)		\
					((pAC)->Hw.Iop + (Addr))) = (Val))	
#endif

	usage:	SK_IN8(IoC, B0_LED, &value);
		SK_OUT8(IoC, B0_LED, value | LED_STAT_ON);


/* Debug Macros */
SK_DBG_PRINTF		...debug printf function
SK_DBG_CHKMOD(pAC)	...check selected sw module for debug output
SK_DBG_CHKCAT(pAC)	...check selected category for debug output
			File:	skdrv1st.h, if DEBUG is defined
		sample: #ifdef DEBUG
			#define SK_DBG_PRINTF		printf
			#define SK_DBG_CHKMOD(pAC)	((pAC)->DebugModules)
			#define SK_DBG_CHKCAT(pAC)	((pAC)->DebugCategories)
			#endif

/* How to use the DEBUG macro SK_DBG_MSG defined in skdebug.h: */

SK_DBG_MSG(pAC, Comp, Cat, Arg)	Debug Macro, provides module- and category
			specific debug output.

	paramters:	pAC	pointer to adapter control structure
			Comp	component to debug (VPD, RLMT, os-specific..)
				- values for shared sw:
					area: 0x00000000 - 0x0000ffff
					bits are defined in skdebug.h
				- values for os-specific sw:
					area: 0x00010000 - 0xffff0000
					bits has TBD by os-specific sw
			Cat	category to debug (Init, Rx, Tx, Ctrl ...)
				- values for shared sw:
					area: 0x00000000 - 0x0000ffff
					bits are defined in skdebug.h
				- values for os-specific sw:
					area: 0x00010000 - 0xffff0000
					bits has TBD by os-specific sw
			Arg	printf argument e.g ("%d\n", len)
				Arg must include braces.
				Due to any restrictions of kernel printf
				routines do not use other format
				identifiers than: %x %d %c %s at
				least in shared modules.
				Combined format identifiers such
				as: %lx %ld in may not be supported
				by some OS specific kernel printfs.

	example:
skdebug.h:

#ifdef DEBUG
	/* DEBUG macro */
#define SK_DBG_MSG(pAC,Comp,Cat,Arg) \
	if ((Comp) & SK_DBG_CHKMOD(pAC)) && \
		((Cat) & SK_DBG_CHKCAT(pAC)) { \
		SK_DEBUG_PRINTF Arg; \
	}
#else	/* !DEBUG */
#define SK_DBG_MSG(pAC,Comp,Cat,Arg)
#endif	/* !DEGUG */


/* Error Log macro */
SK_ERR_LOG(pAc, ErrClass, ErrNum, ErrMsg)	Macro to log an error

	parameter:	pAc		Adapters context
			ErrClass	Error Class as defined in skerror.h
			ErrNum		Error Number which is module specific
					The base numbers are in skerror.h
			ErrMsg		ASCII-Z error message.

/* Error Classes */
SK_ERRCL_OTHER		Other error
SK_ERRCL_CONFIG		Configuration error
SK_ERRCL_INIT		Initialization error
SK_ERRCL_NORES		Out of resources error
SK_ERRCL_SW		internal Software error
SK_ERRCL_HW		Hardware failure
SK_ERRCL_COMM		Communication error

/* Error number bases */
SK_ERRBASE_RLMT		Base Error number for RLMT
SK_ERRBASE_HWINIT	Base Error number for HWInit
SK_ERRBASE_VPD		Base Error number for VPD
SK_ERRBASE_PNMI		Base Error number for PNMI
SK_ERRBASE_CSUM		Base Error number for Checksum
SK_ERRBASE_SIRQ		Base Error number for Special IRQ
SK_ERRBASE_I2C		Base Error number for i2C module
SK_ERRBASE_QUEUE	Base Error number for Scheduler
SK_ERRBASE_ADDR		Base Error number for Address mod.
SK_ERRBASE_DRV		Base Error number for Driver
---

skdrv1st.h:

/* os-specific DEBUG defines */
#define SK_DBGMOD_HWM	0x00010000L	/* os-specific HW Module */

#ifdef DEBUG
	/* modules to check Debug Module and Debug Category */
	/* It is also possible to use global variables for DEBUG options */
#define SK_DBG_CHKMOD(pAC)	((pAC)->DebugModules)
#define SK_DBG_CHKCAT(pAC)	((pAC)->DebugCategories)
#endif	/* !DEGUG */
---

skdrv2nd.h:

struct s_AC {
	SK_U32	DebugModules;		/* Bit field of modules to debug */
	SK_U32	DebugCategories;	/* Bit field of categories to debug */
			:
			:
};
---

skdriver.c

function()
{
	SK_AC	AC;

	/* Set at very first driver initialization/configuration,
	 * may be changed dynamically by IOCTL ....
	 */
	AC.DebugModules = SK_DBGMOD_HWM | SK_DBGMOD_VPD | SK_DBG_CTRL;
	AC.DebugCategories = SK_DBGCAT_CTRL;

	SK_DBG_MSG(&AC, SK_DBGMOD_HWM, SK_DBGCAT_INIT|SK_DBGCAT_CTRL,
		("My debug modules %x\n", AC.DebugModules));

}
***


(5) VARIABLE AND STRUCTURE DESCRIPTION
======================================
***


(6) FUNCTION DESCRIPTION
========================


	SkOsGetTime()

SK_U64	SkOsGetTime(SK_AC *pAC)

Gets the current time from the system in units of SK_TICKS_PER_SEC.
This function is called by RLMT during Lookahead, which is typically
executed in the fast path during an ISR or a deferred procedure call.

returns		the current time in SK_TICKS_PER_SEC
---------------------------------

int	SkPciReadCfgDWord(
SK_AC	*pAC,		/* Adapter Control Structure Pointer */
int	PciAddr,	/* PCI Register Address */
SK_U32	*pVal)		/* Pointer to store the read value */

Reads a 32-bit word from the adapter's configuration space.
This 32-bit word is returned in the machines endianess.

return	0:	success
	!=0:	request failed, unable to read value

---------------------------------

int	SkPciReadCfgWord(
SK_AC	*pAC,		/* Adapter Control Structure Pointer */
int	PciAddr,	/* PCI Register Address */
SK_U16	*pVal)		/* Pointer to store the read value */

Reads a 16-bit word from the adapter's configuration space.
This 16-bit word is returned in the machines endianess.

return	0:	success
	!=0:	request failed, unable to read value

---------------------------------

int	SkPciReadCfgByte(
SK_AC	*pAC,		/* Adapter Control Structure Pointer */
int	PciAddr,	/* PCI Register Address */
SK_U8	*pVal)		/* Pointer to store the read value */

Reads a byte from the adapter's configuration space.

return	0:	success
	!=0:	request failed, unable to read value

---------------------------------

int SkPciWriteCfgDWord(
SK_AC	*pAC,		/* Adapter Control Structure Pointer */
int	PciAddr,	/* PCI Register Address */
SK_U32	Val)		/* value to write */

Writes a 32-bit word to the adapter's configuration space.
This 32-bit word must be given in the machines endianess.

return	0:	success
	!=0:	request failed, unable to write value

---------------------------------

int	SkPciWriteCfgWord(
SK_AC	*pAC,		/* Adapter Control Structure Pointer */
int	PciAddr,	/* PCI Register Address */
SK_U16	Val)		/* value to write */

Writes a 16-bit word to the adapter's configuration space.
This 16-bit word must be given in the machines endianess.

return	0:	success
	!=0:	request failed, unable to write value
---------------------------------

int	SkPciWriteCfgByte(
SK_AC	*pAC,		/* Adapter Control Structure Pointer */
int	PciAddr,	/* PCI Register Address */
SK_U8	Val)		/* value to write */

Writes a byte to the adapter's configuration space.

return	0:	success
	!=0:	request failed, unable to write value
***


(7) HISTORY
===========

$Log: ssrspec.txt,v $
Revision 1.24  1999/01/27 14:35:21  rassmann
Added requirement to SkOsGetTime().

Revision 1.23  1999/01/26 09:10:49  malthoff
Add define SK_USE_REV_DESC.

Revision 1.22  1999/01/11 12:42:53  malthoff
Modify requirements for common module.

Revision 1.21  1998/10/29 07:19:51  gklug
clarify: definition of Cfg Space functions

Revision 1.20  1998/10/19 12:56:02  rassmann
Added SK_MBUF and SK_BIG_ENDIAN.

Revision 1.19  1998/10/16 12:25:49  rassmann
Added Parameter pAC to SkOsGetTime.

Revision 1.18  1998/09/29 10:17:12  mhaveman
Added macros SK_STRNCPY(), SK_STRLEN(), and SK_STRCMP()

Revision 1.17  1998/09/28 13:28:59  malthoff
Add 'Endian comment' for SK_INxx and SK_OUTxx macro.

Revision 1.16  1998/09/16 08:25:58  cgoos
Added SK_MEMSET define for Pnmi.

Revision 1.15  1998/09/16 07:22:25  malthoff
Add macros SK_MEMCPY() and SK_MEMCMP() for VPD module.

Revision 1.14  1998/08/19 09:11:28  gklug
fix: struct are removed from c-source (see CCC)

Revision 1.13  1998/08/18 13:08:31  gklug
chg: SkOsGetTime now returns SK_U64. SK_TICKS_PER_SEC is now 64 bit, too.

Revision 1.12  1998/08/11 11:15:12  gklug
add: error classes definition
add: error bases
add: include file skerror.h

Revision 1.11  1998/08/11 09:00:21  gklug
add: Error Logging macro

Revision 1.10  1998/07/28 12:31:47  malthoff
SK_IOC must be defined without braces. We would get
Compiler error messages if we do so in prototypes and
function declarations.

Revision 1.9  1998/07/28 11:35:41  gklug
upd: spec for IoC (IO context)

Revision 1.8  1998/07/28 11:27:28  gklug
add: explanation of the usage of SK_IOC in common sources.

Revision 1.7  1998/07/23 08:32:34  malthoff
Add module dependencies for HwInit.
Add define SK_MAX_MACS.

Revision 1.6  1998/07/16 07:20:05  gklug
chg: replace \ with / in include files according to C Coding Conventions.

Revision 1.5  1998/07/14 13:54:51  gklug
Added the IO context type which is used for the IO macros.

Revision 1.4  1998/06/29 13:33:15  malthoff
Correct SK_IN and SK_OUT macros again.
It is not possible to use 'if' statements needs a ;
which is not allowed in ().

Revision 1.3  1998/06/23 11:34:29  malthoff
Correct sample SK_IN8 and SK_OUT8 macro (use ',' instead of ':')

Revision 1.2  1998/06/23 06:06:37  malthoff
Add SK_INxx() and SK_OUTxx() macros.
Add define SK_MEM_MAPPED_IO.

Revision 1.1  1998/06/19 14:05:35  malthoff
Created. Contains VPD module requirements and DEBUG macro
description. SK_INxx and SK_OUTxx macros are still missing.

*** End of Document ***
Download Driver Pack

How To Update Drivers Manually

After your driver has been downloaded, follow these simple steps to install it.

  • Expand the archive file (if the download file is in zip or rar format).

  • If the expanded file has an .exe extension, double click it and follow the installation instructions.

  • Otherwise, open Device Manager by right-clicking the Start menu and selecting Device Manager.

  • Find the device and model you want to update in the device list.

  • Double-click on it to open the Properties dialog box.

  • From the Properties dialog box, select the Driver tab.

  • Click the Update Driver button, then follow the instructions.

Very important: You must reboot your system to ensure that any driver updates have taken effect.

For more help, visit our Driver Support section for step-by-step videos on how to install drivers for every file type.

server: web2, load: 0.78