📄 drv_conf.c
字号:
/* @(#) pSOSystem/PowerPC V2.1.2: apps/xxxx/drv_conf.c (std) 2.32 95/08/07 09:50:01 */
/***********************************************************************/
/* */
/* MODULE: drv_conf.c */
/* DATE: 95/08/07 */
/* 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 - 1995, 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>
#if SC_DEV_SPI
#include "spi.h"
#endif
#if (SC_PSE)
#include <psecfg.h>
#include <sys/stream.h>
#endif
#if (SC_DEV_DLPI)
extern long DlpiEnet();
#endif
#define NULLF (ULONG) ((void (*)()) 0)
extern struct SD_parms SysVars;
void InstallNi(int (*entry)(), int, int, int, int, int, int);
static const char RarpErrTimeout[] =
"RARP request failed: Check for a RARP server";
static const char RarpErrNet[] =
"RARP request failed: Network Error";
#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) reserved */
/* */
/* 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)
{
/*---------------------------------------------------------------------*/
/* 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);
FreeMemPtr = CnslSetup(FreeMemPtr, SysVars.DefBaud,
SC_APP_CONSOLE);
#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);
#endif
/*---------------------------------------------------------------------*/
/* Install the pSOSystem ramdisk driver. */
/*---------------------------------------------------------------------*/
#if SC_DEV_RAMDISK
#if(SC_DEV_RAMDISK > SC_DEVMAX)
#error "SC_DEV_RAMDISK cannot be > SC_DEVMAX"
#endif
InstallDriver(SC_DEV_RAMDISK, RdskInit, NULLF, NULLF, RdskRead,
RdskWrite, NULLF, 0, 0);
#endif
/*---------------------------------------------------------------------*/
/* Install the pSOSystem SCSI driver. */
/*---------------------------------------------------------------------*/
#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, NULLF, NULLF, SdskRead,
SdskWrite, SdrvCntrl, 0, 0);
#endif
/*---------------------------------------------------------------------*/
/* Install the pSOSystem SCSI Tape driver. */
/*---------------------------------------------------------------------*/
#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);
/*-----------------------------------------------------------------*/
/* Don't need to call SdrvSetup this time since it was done before */
/*-----------------------------------------------------------------*/
/* SdrvSetup(); */
#endif
/*---------------------------------------------------------------------*/
/* Install the pSOSystem TFTP driver. */
/*---------------------------------------------------------------------*/
#if (SC_DEV_TFTP)
#if(SC_DEV_TFTP > SC_DEVMAX)
#error "SC_DEV_TFTP cannot be > SC_DEVMAX"
#endif
InstallDriver(SC_DEV_TFTP, TftpInit, TftpOpen, TftpClose, TftpRead,
NULLF, TftpCntl, 0, 0);
#endif
/*---------------------------------------------------------------------*/
/* Install the SPI driver */
/*---------------------------------------------------------------------*/
#if (SC_DEV_SPI)
#if(SC_DEV_SPI > SC_DEVMAX)
#error "SC_DEV_SPI cannot be > SC_DEVMAX"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -