📄 drv_conf.c
字号:
/* @(#) pSOSystem PowerPC/V2.5.0-F3: apps.v22/xxxx/drv_conf.c 3.17 (hello) 98/04/21 16:36:01 *//***********************************************************************//* *//* MODULE: drv_conf.c *//* DATE: 98/04/21 *//* PURPOSE: pSOSystem driver configuration and initialization *//* *//* There are two functions in this file: *//* *//* SetUpDrivers to setup drivers except for Network drivers *//* SetUpNI to setup Network drivers *//* *//*---------------------------------------------------------------------*//* *//* Copyright 1993 - 1997, Integrated Systems, Inc. *//* ALL RIGHTS RESERVED *//* *//* Permission is hereby granted to licensees of Integrated Systems, *//* Inc. products to use or abstract this computer program for the *//* sole purpose of implementing a product based on Integrated *//* Systems, Inc. products. No other rights to reproduce, use, *//* or disseminate this computer program, whether in part or in *//* whole, are granted. *//* *//* Integrated Systems, Inc. makes no representation or warranties *//* with respect to the performance of this computer program, and *//* specifically disclaims any responsibility for any damages, *//* special or consequential, connected with the use of this program. *//* *//*---------------------------------------------------------------------*//* *//* *//* *//***********************************************************************/#include "sys_conf.h"#include "bsp.h"#include "bspfuncs.h"#include "configs.h"#include "sysvars.h"#include "pna.h"#ifdef SC_INIT_DNTABLE#include <stdarg.h>static long GenerateString(char *dest, char *format, ...);#endif#if SC_DEV_SPI #include "spi.h"#endif#if (SC_PSE)#include <psecfg.h>#include <sys/stream.h>#endif#if (SC_DEV_DLPI)#include <sys/enetdlpi.h>#endif#ifndef KC_DNLEN /*should be defined in "sys_conf.h"*/#define KC_DNLEN 8#endif#define NULLF 0extern struct SD_parms SysVars;void InstallNi(int (*entry)(), int, int, int, int, int, int);#if SC_PSOS || SC_PSOSM/***********************************************************************//* SetUpDrivers: installs drivers in PsosIO table via a call to *//* InstallDriver and then calls driver setup function if *//* needed. NOTE: If the driver is to be part of the *//* Network Interface then it should be placed in the *//* SetUpNI function. *//* *//* INPUT: FreeMemPtr = A pointer to unused memory that can be *//* used to allocate space for a driver. *//* NOTE: Be sure to advance FreeMemPtr if *//* memory is allocates! *//* *//* RETURNS: The new address of free memory after the drivers have *//* allocated space. *//* *//* NOTE: This function does many precompile checks so errors *//* can be found during compile-time rather then at run- *//* time. *//* *//* To add a non-Network driver to pSOSystem, call InstallDriver(). *//* This adds a device driver to the PsosIO table. InstallDriver() *//* takes the following arguments: *//* *//* unsigned short major_number device major number *//* void (*dev_init)(), device init procedure *//* void (*dev_open)(), device open procedure *//* void (*dev_close)(), device close procedure *//* void (*dev_read)(), device read procedure *//* void (*dev_write)(), device write procedure *//* void (*dev_ioctl)(), device control procedure *//* unsigned long rsvd1, reserved *//* unsigned long rsvd2_and_flags If set to IO_AUTOINIT << 16, pSOS*//* will automatically call the *//* drivers initialization *//* function. The SC_AUTOINIT *//* #define which is set in *//* sys_conf.h can be used to set *//* this element. *//* *//* InstallDriver() does not return a value. InstallDriver() assumes *//* SC_DEVMAX is defined in sys_conf.h and is useful only before pSOS+ *//* has been initialized. *//* *//* If you are adding a driver that needs to be initialized before *//* either pSOS+ is initialized or the driver's init function is *//* called, then you can call a setup function (that you create) for *//* the driver (for example, see the CnslSetup call for the serial *//* device driver). If your initialization function needs to allocate *//* memory, you may pass it the FreeMemPtr. The function should return *//* a new FreeMemPtr which points to the end of the memory it has *//* allocated. *//* *//* When adding code to install a new driver, it is a good idea to add *//* precompile checks so errors can be found during compile-time rather *//* then at run-time. Precompile checks are used, for example, in the *//* code that installs the pSOSystem serial device driver below. *//* *//***********************************************************************/UCHAR *SetUpDrivers(UCHAR *FreeMemPtr){extern ULONG PsosNumDntEnts;/*---------------------------------------------------------------------*//* Install the pSOSystem serial device driver. *//*---------------------------------------------------------------------*/#if (SC_DEV_SERIAL && BSP_SERIAL) #if(SC_DEV_SERIAL > SC_DEVMAX) #error "SC_DEV_SERIAL cannot be > SC_DEVMAX" #endif InstallDriver(SC_DEV_SERIAL, CnslInit, NULLF, NULLF,CnslRead, CnslWrite, CnslCntrl, 0, 0, IO_AUTOINIT); FreeMemPtr = CnslSetup(FreeMemPtr, SysVars.DefBaud, SC_APP_CONSOLE); PsosNumDntEnts++;#endif/*---------------------------------------------------------------------*//* Install Pseudo driver *//* NOTE: This driver must be called from a task it cannot use the *//* auto initialization freature of pSOS+ *//*---------------------------------------------------------------------*/#if (SC_DEV_PSEUDO) InstallDriver(SC_DEV_PSEUDO, PseudoIOInit, NULLF, NULLF, PseudoIORead, PseudoIOWrite, PseudoIOCntrl, 0, 0, 0); PsosNumDntEnts++;#endif/*--------------------------------------------------------------------*//* Setup pSOSystem PC console device driver *//*--------------------------------------------------------------------*/#if (SC_DEV_CONSOLE && BSP_CONSOLE) #if (SC_DEV_CONSOLE >SC_DEVMAX) #error "SC_DEV_CONSOLE cannot be > SC_DEVMAX" #endif InstallDriver(SC_DEV_CONSOLE, PcCnslInit, NULLF, NULLF, PcCnslRead, PcCnslWrite, PcCnslCntrl, 0, 0, IO_AUTOINIT); PsosNumDntEnts++;#endif/*---------------------------------------------------------------------*//* Install the pSOSystem tick timer. *//*---------------------------------------------------------------------*/#if SC_DEV_TIMER #if(SC_DEV_TIMER > SC_DEVMAX) #error "SC_DEV_TIMER cannot be > SC_DEVMAX" #endif #if (!SC_PSOS && !SC_PSOSM) #error "Must have pSOS+ or pSOS+m in system to use tick timer!" #endif InstallDriver(SC_DEV_TIMER, RtcInit, NULLF, NULLF, NULLF, NULLF, NULLF, 0, 0, IO_AUTOINIT); PsosNumDntEnts++;#endif/*---------------------------------------------------------------------*//* Install the pSOSystem ramdisk driver. *//* NOTE: This driver must be called from a task it cannot use the *//* auto initialization freature of pSOS+ *//*---------------------------------------------------------------------*/#if SC_DEV_RAMDISK #if(SC_DEV_RAMDISK > SC_DEVMAX) #error "SC_DEV_RAMDISK cannot be > SC_DEVMAX" #endif InstallDriver(SC_DEV_RAMDISK, RdskInit, RdskOpen, RdskClose, RdskRead, RdskWrite, RdskCntrl, 0, 0, 0); PsosNumDntEnts++;#endif/*---------------------------------------------------------------------*//* Install the pSOSystem SCSI driver. *//* NOTE: This driver must be called from a task it cannot use the *//* auto initialization freature of pSOS+ *//*---------------------------------------------------------------------*/#if (SC_DEV_SCSI && BSP_SCSI) #if(SC_DEV_SCSI > SC_DEVMAX) #error "SC_DEV_SCSI cannot be > SC_DEVMAX" #endif InstallDriver(SC_DEV_SCSI, SdrvInit, SdskOpen, SdskClose, SdskRead, SdskWrite, SdrvCntrl, 0, 0, 0); PsosNumDntEnts += (8*5);#endif/*---------------------------------------------------------------------*//* Install the pSOSystem SCSI Tape driver. *//* NOTE: This driver must be called from a task it cannot use the *//* auto initialization freature of pSOS+ *//*---------------------------------------------------------------------*/#if (SC_DEV_SCSI_TAPE && BSP_SCSI_TAPE) #if(SC_DEV_SCSI_TAPE > SC_DEVMAX) #error "SC_DEV_SCSI_TAPE cannot be > SC_DEVMAX" #endif InstallDriver(SC_DEV_SCSI_TAPE, SdrvInit, StapeOpen, StapeClose, StapeRead, StapeWrite, SdrvCntrl, 0, 0, 0); PsosNumDntEnts += 8; /*-----------------------------------------------------------------*/ /* Don't need to call SdrvSetup this time since it was done before */ /*-----------------------------------------------------------------*/ /* SdrvSetup(); */#endif/*---------------------------------------------------------------------*//* Setup pSOSystem CMOS clock driver *//*---------------------------------------------------------------------*/#if (SC_DEV_CMOS && BSP_CLOCK) #if (SC_DEV_CMOS >SC_DEVMAX) #error "SC_DEV_CMOS cannot be > SC_DEVMAX" #endif InstallDriver(SC_DEV_CMOS, NULLF, NULLF, NULLF, CmcRead, CmcWrite, NULLF, 0, 0, 0); PsosNumDntEnts++;#endif/*---------------------------------------------------------------------*//* Setup pSOSystem printer driver *//*---------------------------------------------------------------------*/#if (SC_DEV_PARALLEL && BSP_PARALLEL) #if (SC_DEV_PARALLEL >SC_DEVMAX) #error "SC_DEV_PARALLEL cannot be > SC_DEVMAX" #endif InstallDriver(SC_DEV_PARALLEL, ParInit, ParOpen, ParClose, NULLF, ParWrite, ParCntrl, 0, 0, 0); PsosNumDntEnts++;#endif /*---------------------------------------------------------------------*//* Setup pSOSystem floppy diskette driver *//* NOTE: This driver must be called from a task it cannot use the *//* auto initialization freature of pSOS+ *//*---------------------------------------------------------------------*/#if (SC_DEV_FLOPPY && BSP_FLOPPY) #if (SC_DEV_FLOPPY >SC_DEVMAX) #error "SC_DEV_FLOPPY cannot be > SC_DEVMAX" #endif InstallDriver(SC_DEV_FLOPPY, FlpInit, NULLF, NULLF, FlpRead, FlpWrite, NULLF, 0, 0, 0); PsosNumDntEnts += 2;#endif /*---------------------------------------------------------------------*//* Setup pSOSystem IDE disk driver *//* NOTE: This driver must be called from a task it cannot use the *//* auto initialization freature of pSOS+ *//*---------------------------------------------------------------------*/#if (SC_DEV_IDE && BSP_IDE) #if (SC_DEV_IDE >SC_DEVMAX)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -