summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halalpha/flash8k.h
blob: 32a5f18f25a026d3693db2569f798e58d50186bc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// flash8k.h

#ifndef _FLASH8K_H_
#define _FLASH8K_H_

#ifdef FLASH8K_INCLUDE_FILES
#include "halp.h"
#include "arccodes.h"
#endif //FLASH8K_DONT_INCLUDE_FILES

//
//      The value of HalpCMOSRamBase must be set at initialization
//

typedef enum _FLASH_OPERATIONS {
  FlashByteWrite,
  FlashEraseBlock
} FLASH_OPERATIONS, *PFLASH_OPERATIONS;

typedef struct _FLASH_DRIVER {
  PCHAR      DeviceName;
  ARC_STATUS (*SetReadModeFunction)(PUCHAR address);
  ARC_STATUS (*WriteByteFunction)(PUCHAR address, UCHAR data);
  ARC_STATUS (*EraseBlockFunction)(PUCHAR address);
  PUCHAR     (*BlockAlignFunction)(PUCHAR address);
  UCHAR      (*ReadByteFunction)(PUCHAR address);
  BOOLEAN    (*OverwriteCheckFunction)(UCHAR olddata, UCHAR newdata);
  ULONG      (*BlockSizeFunction)(PUCHAR address);
  ULONG      (*GetLastErrorFunction)(VOID);
  ULONG      DeviceSize;
  UCHAR      ErasedData;
} FLASH_DRIVER, *PFLASH_DRIVER;

extern PFLASH_DRIVER HalpFlashDriver;

#define WRITE_CONFIG_RAM_DATA(boffset,data) \
        WRITE_REGISTER_UCHAR((PUCHAR)(boffset),((data) & 0xff))

#define READ_CONFIG_RAM_DATA(boffset) \
        READ_REGISTER_UCHAR((PUCHAR)(boffset))


PFLASH_DRIVER
HalpInitializeFlashDriver(
    IN PCHAR NvRamPtr
    );

ARC_STATUS
HalpReadNVRamBuffer (
    OUT PCHAR DataPtr,
    IN  PCHAR NvRamPtr,
    IN  ULONG Length
    );

ARC_STATUS
HalpWriteNVRamBuffer (
    IN  PCHAR NvRamPtr,
    IN  PCHAR DataPtr,
    IN  ULONG Length
    );

ARC_STATUS
HalpCopyNVRamBuffer (
    IN  PCHAR NvDestPtr,
    IN  PCHAR NvSrcPtr,
    IN  ULONG Length
    );


//
// The following macros define the HalpFlash8k*() functions in terms
// of the FlashDriver variable.  FlashDriver points to a structure
// containing information about the currently active flash driver.
// Information in the structure pointed to by FlashDriver includes
// functions within the driver to perform all device-dependent operations.
//

#define HalpFlash8kSetReadMode(boffset)             \
        HalpFlashDriver->SetReadModeFunction(       \
                (PUCHAR)((ULONG)(HalpCMOSRamBase) | \
                (ULONG)(boffset)))

#define HalpFlash8kReadByte(boffset)                \
        HalpFlashDriver->ReadByteFunction(          \
                (PUCHAR)((ULONG)(HalpCMOSRamBase) | \
                (ULONG)(boffset)))

#define HalpFlash8kWriteByte(boffset, data)         \
        HalpFlashDriver->WriteByteFunction(         \
                (PUCHAR)((ULONG)(HalpCMOSRamBase) | \
                (ULONG)(boffset)), ((data) & 0xff))

#define HalpFlash8kOverwriteCheck(olddata, newdata) \
        HalpFlashDriver->OverwriteCheckFunction(    \
                (olddata) & 0xff, (newdata) & 0xff)

#define HalpFlash8kEraseBlock(boffset)              \
        HalpFlashDriver->EraseBlockFunction(        \
                (PUCHAR)((ULONG)(HalpCMOSRamBase) | \
                (ULONG)(boffset)))

#define HalpFlash8kBlockAlign(boffset)              \
        HalpFlashDriver->BlockAlignFunction(        \
                (PUCHAR)((ULONG)(HalpCMOSRamBase) | \
                (ULONG)(boffset)))

#define HalpFlash8kBlockSize(boffset)               \
        HalpFlashDriver->BlockSizeFunction(         \
                (PUCHAR)((ULONG)(HalpCMOSRamBase) | \
                (ULONG)(boffset)))

#define HalpFlash8kCheckStatus(boffset, operation)  \
        HalpFlashDriver->CheckStatusFunction(       \
                (PUCHAR)((ULONG)(HalpCMOSRamBase) | \
                (ULONG)(boffset)), (operation))

#define HalpFlash8kGetLastError()                   \
        HalpFlashDriver->GetLastErrorFunction()


//
// Error codes for GetLastError()
//
#define ERROR_VPP_LOW       1L
#define ERROR_ERASE_ERROR   2L
#define ERROR_WRITE_ERROR   3L
#define ERROR_TIMEOUT       4L
#define ERROR_UNKNOWN       127L

#endif // _FLASH8K_H_