mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
340 lines
6.9 KiB
340 lines
6.9 KiB
/*++
|
|
|
|
Module Name:
|
|
|
|
resorces.h
|
|
|
|
Abstract:
|
|
|
|
The resources (i/O port , DMA ,.. class
|
|
|
|
Author:
|
|
|
|
Dieter Achtelstetter (A-DACH) 2/17/96
|
|
|
|
NOTE:
|
|
|
|
|
|
--*/
|
|
|
|
#ifndef _RESOURCES_
|
|
#define _RESOURCES_
|
|
|
|
#include "..\llist\llist.h"
|
|
#include "resource.h"
|
|
|
|
|
|
|
|
extern HINSTANCE hinst;
|
|
|
|
|
|
#define MAX_RESOURCE_LABEL_LEN 40
|
|
#define MAX_RESOURCE_STRING_LEN 30
|
|
|
|
//
|
|
//---- Valid resource ranges
|
|
//
|
|
#define LowValidIrq 2
|
|
#define HighValidIrq 15
|
|
|
|
#define LowValidPort 0x100
|
|
#define HighValidPort 0xf000
|
|
#define LowValidPortLen 0
|
|
#define HighValidPortLen 100
|
|
|
|
#define LowValidMemoryAddress 0xC0000
|
|
#define HighValidMemoryAddress 0xFF000
|
|
#define LowValidMemoryLenght 0x1
|
|
#define HighValidMemoryLenght 0xFFFFFF
|
|
|
|
#define LowValidDMAChannel 0x1
|
|
#define HighValidDMAChannel 0x8
|
|
|
|
|
|
|
|
#define CONFIG_MATCH 0
|
|
#define CONFIG_CONFLICT 1
|
|
#define CONFIG_NOT_MATCH 2
|
|
|
|
|
|
#define RESOURCE_TYPE_IRQ 0
|
|
#define RESOURCE_TYPE_DMA 1
|
|
#define RESOURCE_TYPE_MEM 2
|
|
#define RESOURCE_TYPE_PORT 3
|
|
|
|
//
|
|
//---- Resource ITEM base Class
|
|
//
|
|
typedef class RESOURCE_ITEM * PRESOURCE_ITEM;
|
|
class RESOURCE_ITEM
|
|
{
|
|
TCHAR Info[MAX_RESOURCE_STRING_LEN];
|
|
|
|
public:
|
|
virtual BOOL Valid(VOID){return(0);};
|
|
virtual VOID GetResourceString(TCHAR * Buff,DWORD BuffLen){};
|
|
virtual TCHAR * LabelString(VOID){return(TEXT(""));};
|
|
inline TCHAR * ResourceString(VOID)
|
|
{
|
|
if(*Info==L'\0')
|
|
GetResourceString(Info,MAX_RESOURCE_STRING_LEN);
|
|
|
|
return(Info);
|
|
};
|
|
virtual DWORD Type(VOID){return(0);};
|
|
virtual DWORD Data(VOID){return(0);};
|
|
RESOURCE_ITEM(){*Info=L'\0';};
|
|
};
|
|
|
|
|
|
|
|
//
|
|
//---- Single IRQ Info
|
|
//
|
|
|
|
class IRQLABELC
|
|
{
|
|
public:
|
|
TCHAR Info[MAX_RESOURCE_LABEL_LEN];
|
|
IRQLABELC() {LoadString(hinst,IDS_Irq,Info,MAX_RESOURCE_LABEL_LEN);};
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef class IRQC * PIRQC;
|
|
class IRQC : public RESOURCE_ITEM
|
|
{
|
|
public:
|
|
|
|
ULONG Irq;
|
|
IRQLABELC Label;
|
|
|
|
BOOL Valid(VOID);
|
|
inline VOID GetResourceString(TCHAR * Buff,DWORD BuffLen)
|
|
{_snwprintf(Buff,BuffLen,TEXT("%li"),Irq);};
|
|
TCHAR * LabelString(VOID){return(Label.Info);};
|
|
inline DWORD Type(VOID){return(RESOURCE_TYPE_IRQ);};
|
|
inline DWORD Data(VOID){return(Irq);};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//
|
|
//---- Single port Info
|
|
//
|
|
|
|
class PORTLABELSC
|
|
{
|
|
public:
|
|
TCHAR Info[MAX_RESOURCE_LABEL_LEN];
|
|
PORTLABELSC() {LoadString(hinst,IDS_Port,Info,MAX_RESOURCE_LABEL_LEN);};
|
|
};
|
|
|
|
|
|
|
|
typedef class PORTC * PPORTC;
|
|
class PORTC : public RESOURCE_ITEM
|
|
{
|
|
public:
|
|
ULONG Base;
|
|
ULONG Len;
|
|
PORTLABELSC Label;
|
|
|
|
|
|
BOOL Valid(VOID);
|
|
inline VOID GetResourceString(TCHAR * Buff,DWORD BuffLen)
|
|
{_snwprintf(Buff,BuffLen,TEXT("%X-%X"), Base,Base + Len - 1);};
|
|
inline TCHAR * LabelString(VOID){return(Label.Info);};
|
|
inline DWORD Type(VOID){return(RESOURCE_TYPE_PORT);};
|
|
inline DWORD Data(VOID){return(Base);};
|
|
|
|
};
|
|
|
|
//
|
|
//---- Single DMA info
|
|
//
|
|
|
|
class DMALABELSC
|
|
{
|
|
public:
|
|
TCHAR Info[MAX_RESOURCE_LABEL_LEN];
|
|
DMALABELSC() {LoadString(hinst,IDS_DMA,Info,MAX_RESOURCE_LABEL_LEN);};
|
|
};
|
|
|
|
|
|
typedef class DMAC * PDMAC;
|
|
class DMAC : public RESOURCE_ITEM
|
|
{
|
|
private:
|
|
public:
|
|
ULONG Channel;
|
|
ULONG Port;
|
|
DMALABELSC Label;
|
|
|
|
BOOL Valid(VOID);
|
|
inline VOID GetResourceString(TCHAR * Buff,DWORD BuffLen)
|
|
{_snwprintf(Buff,BuffLen,TEXT("%li"),Channel);};
|
|
inline TCHAR * LabelString(VOID){return(Label.Info);};
|
|
inline DWORD Type(VOID){return(RESOURCE_TYPE_DMA);};
|
|
inline DWORD Data(VOID){return(Channel);};
|
|
};
|
|
|
|
|
|
//
|
|
//---- Single Memmory range info
|
|
//
|
|
|
|
|
|
class MEMMORYLABELSC
|
|
{
|
|
public:
|
|
TCHAR Info[MAX_RESOURCE_LABEL_LEN];
|
|
MEMMORYLABELSC() {LoadString(hinst,IDS_Memory,Info,MAX_RESOURCE_LABEL_LEN);};
|
|
};
|
|
|
|
|
|
typedef class MEMMORYC * PMEMMORYC;
|
|
class MEMMORYC : public RESOURCE_ITEM
|
|
{
|
|
public:
|
|
|
|
ULONG Address;
|
|
ULONG Length;
|
|
MEMMORYLABELSC Label;
|
|
|
|
BOOL Valid(VOID);
|
|
inline VOID GetResourceString(TCHAR * Buff,DWORD BuffLen)
|
|
{
|
|
|
|
if(Length <= HighValidMemoryLenght &&
|
|
Length >= LowValidMemoryLenght)
|
|
_snwprintf(Buff,BuffLen,TEXT("%X-%X"),Address,Address + Length - 1);
|
|
else
|
|
_snwprintf(Buff,BuffLen,TEXT("%X-????"),Address);
|
|
|
|
|
|
};
|
|
inline TCHAR * LabelString(VOID){return(Label.Info);};
|
|
inline DWORD Type(VOID){return(RESOURCE_TYPE_MEM);};
|
|
inline DWORD Data(VOID){return(Address);};
|
|
};
|
|
|
|
|
|
//
|
|
//--- Configuration info
|
|
//
|
|
|
|
|
|
typedef class CONFIGINFO * PCONFIGINFO;
|
|
|
|
class CONFIGINFO
|
|
{
|
|
private:
|
|
PLLIST List;
|
|
BOOL bValid;
|
|
|
|
VOID Append(LPVOID Data,BOOL ValidData);
|
|
|
|
public:
|
|
|
|
inline CONFIGINFO()
|
|
{
|
|
List = new LLIST;
|
|
bValid = TRUE;
|
|
};
|
|
|
|
inline ~CONFIGINFO()
|
|
{
|
|
PRESOURCE_ITEM Resource;
|
|
Resource = First();
|
|
|
|
while(Resource)
|
|
{
|
|
delete Resource;
|
|
Resource = Next();
|
|
}
|
|
|
|
delete List;
|
|
};
|
|
|
|
inline VOID Clear()
|
|
{
|
|
if( Count() )
|
|
{
|
|
delete List;
|
|
List = new LLIST;
|
|
bValid = TRUE;
|
|
}
|
|
}
|
|
|
|
BOOL CompConfigInfo(LPVOID Conf);
|
|
|
|
inline PRESOURCE_ITEM First(VOID){return( (PRESOURCE_ITEM) List->First() );};
|
|
inline PRESOURCE_ITEM Next(VOID) {return((PRESOURCE_ITEM) List->Next());};
|
|
inline BOOL Valid(VOID){return(bValid);};
|
|
inline DWORD Count(VOID){ return(List->Count()); };
|
|
|
|
inline VOID
|
|
AppendIrq(
|
|
ULONG aIrq)
|
|
{
|
|
PIRQC Irq = new IRQC;
|
|
Irq->Irq = aIrq;
|
|
Append( (LPVOID) Irq,Irq->Valid());
|
|
};
|
|
|
|
inline VOID
|
|
AppendPort(
|
|
ULONG Base,
|
|
ULONG Len)
|
|
{
|
|
PPORTC Port;
|
|
|
|
//
|
|
//--- If this is the 0x16E-0x16E I/O Port.
|
|
//--- used for the 3 IDE address on PCMCIA
|
|
//--- just swolow it.
|
|
//--- The reason for this is that PCMCIA maps
|
|
//--- one port from 0x160-16E but atdisk maps
|
|
//--- 2 ports. If I swalow the second port
|
|
//--- the compare from what PCMCIA maps and what
|
|
//--- atdisk maps will pass.
|
|
//BUGBUG
|
|
if(Base == 0x16E && Len == 1)
|
|
return;
|
|
|
|
|
|
Port = new PORTC;
|
|
Port->Base = Base;
|
|
Port->Len = Len;
|
|
Append( (LPVOID) Port,Port->Valid());
|
|
};
|
|
|
|
inline VOID
|
|
AppendMemmory(
|
|
ULONG Address,
|
|
ULONG Length)
|
|
{
|
|
PMEMMORYC Mem = new MEMMORYC;
|
|
Mem->Address = Address;
|
|
Mem->Length = Length;
|
|
Append( (LPVOID) Mem,Mem->Valid());
|
|
};
|
|
|
|
inline VOID
|
|
AppendDma(
|
|
ULONG Channel)
|
|
{
|
|
PDMAC Dma = new DMAC;
|
|
Dma->Channel = Channel;
|
|
Append( (LPVOID) Dma,Dma->Valid());
|
|
};
|
|
|
|
|
|
};
|
|
|
|
#endif
|
|
|