⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtfsinit.c

📁 ertfs文件系统里面既有完整ucos程序
💻 C
字号:
/*
* EBS - RTFS (Real Time File Manager)
*
* Copyright EBS inc, 1996
* All rights reserved.
* This code may not be redistributed in source or linkable object form
* without the consent of its author.
*/

#include "pcdisk.h"

/* This is used only in this file set it to 0 if you don't want to 
   print the names of the drivers as they are mounted */  
#define PRINT_DEVNAMES 1

#define SUPPORTS_CONSOLE 1

#if (PRINT_DEVNAMES)
char *dev_name[NDRIVES];
#define SAVE_NAME(LOGIGAL_DRIVE_NUMBER,STRING)  dev_name[LOGIGAL_DRIVE_NUMBER] = STRING;
#endif

BOOLEAN pc_ertfs_init(void)
{
int j;
DDRIVE *pdr;
int lock_unit = 0;
word logical_drive_number;

    if (!pc_memory_init())
        return(FALSE);

#if (PRINT_DEVNAMES)
    for (j = 0; j < NDRIVES; j++, pdr++)
        dev_name[j] = 0;
#endif

    pdr = mem_drives_structures;

    /* Increment the lock unit to the first IDE controller */
    lock_unit += 1;

    /* IO addresses and interrupts used for ATA devices */
    /*              Primary  Secondary Tertiary Quaternary
     *              0x01f0  0x0170     0x01e8   0x0168  
     *              0x03f6  0x0376     0x03ee   0x036e
     *              14      15         11       10
     *      Note: -1 for interrupts means used polled
     */

/* Note: We automatically set IDE to C: if USE_ATA is defined.
   This is just just a convenience the order of processing and device
   ID assignment is completely user configurable */
#if (USE_ATA) 

#if(NDRIVES <= 2)
#error NDRIVES IS TOO SMALL
#endif

#if (1)
	/* Install DRIVE C: As the primary controller, master IDE drive 
        first partition */
    logical_drive_number = 2;   /* C: for first IDE drive */

    pdr->register_file_address  = (IOADDRESS) 0x4000002; // Primary IO address
    // Note: Set interrupt number to -1 to use polled mode
    pdr->interrupt_number       = -1;    // Primary ATA interrupt 
    pdr->drive_flags            = DRIVE_FLAGS_PARTITIONED;
    pdr->partition_number       = 0;     // 
    pdr->lock_unit              = lock_unit;
    pdr->pcmcia_slot_number     = 0;
    pdr->pcmcia_controller_number = 0;
    pdr->controller_number      = 0;
    pdr->logical_unit_number    = 0;
    pdr->dev_table_drive_io     = ide_io;
    pdr->dev_table_perform_device_ioctl = ide_perform_device_ioctl;
    drno_to_dr_map[logical_drive_number] = pdr; // MAPS DRIVE structure to B:
    SAVE_NAME(logical_drive_number, "Primary Fixed IDE Master");
    pdr->driveno = logical_drive_number++;
    pdr++;

#endif  

    /* Install DRIVE D: As first IDE drive second partition */
#if(NDRIVES <= 3)
#error NDRIVES IS TOO SMALL
#endif

#if (1) // BUGBUG - change to if (1) Set to zero to turn off 2nd partition support 
    logical_drive_number = 3;   /* D: for first IDE drive 2nd partition */
    pdr->register_file_address  = (IOADDRESS) 0x1f0; // Primary IO address
    // Note: Set interrupt number to -1 to use polled mode
    pdr->interrupt_number       = -1;    // Primary ATA interrupt 
    pdr->drive_flags            = DRIVE_FLAGS_PARTITIONED;
    pdr->partition_number       = 1;     // 
    pdr->lock_unit              = lock_unit;
    pdr->pcmcia_slot_number     = 0;
    pdr->pcmcia_controller_number = 0;
    pdr->controller_number      = 0;
    pdr->logical_unit_number    = 0;
    pdr->dev_table_drive_io     = ide_io;
    pdr->dev_table_perform_device_ioctl = ide_perform_device_ioctl;
    drno_to_dr_map[logical_drive_number] = pdr; // MAPS DRIVE structure to B:
    SAVE_NAME(logical_drive_number,"Primary Fixed IDE Master 2nd")
    pdr->driveno = logical_drive_number++;
    pdr++;
#endif

#endif // ATA

    /* End User initialization section */

    pdr= mem_drives_structures;
    for (j = 0; j < NDRIVES; j++, pdr++)
    {
        if (pdr->dev_table_drive_io)
        {
#if (PRINT_DEVNAMES)
        if (dev_name[pdr->driveno])
#if (SUPPORTS_CONSOLE)
     tm_printf_3("Drive: %c Device: %s\n", (char) ('A' + pdr->driveno), dev_name[pdr->driveno]);
#endif
#endif
            drno_to_dr_map[pdr->driveno] = pdr; // MAPS DRIVE structure to DRIVE:
            if (pdr->dev_table_perform_device_ioctl(pdr->driveno, DEVCTL_WARMSTART, (PFVOID) 0) != 0)
                drno_to_dr_map[pdr->driveno] = 0; // It's not there. 
                                                  // so forget it
        }
    }
    return(TRUE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -