Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 1 | // Definitions for X86 CMOS non-volatile memory access. |
| 2 | // |
| 3 | // Copyright (C) 2008 Kevin O'Connor <kevin@koconnor.net> |
| 4 | // |
Kevin O'Connor | b1b7c2a | 2009-01-15 20:52:58 -0500 | [diff] [blame] | 5 | // This file may be distributed under the terms of the GNU LGPLv3 license. |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 6 | #ifndef __CMOS_H |
| 7 | #define __CMOS_H |
| 8 | |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 9 | #define CMOS_RTC_SECONDS 0x00 |
| 10 | #define CMOS_RTC_SECONDS_ALARM 0x01 |
| 11 | #define CMOS_RTC_MINUTES 0x02 |
| 12 | #define CMOS_RTC_MINUTES_ALARM 0x03 |
| 13 | #define CMOS_RTC_HOURS 0x04 |
| 14 | #define CMOS_RTC_HOURS_ALARM 0x05 |
Kevin O'Connor | 4b60c00 | 2008-02-25 22:29:55 -0500 | [diff] [blame] | 15 | #define CMOS_RTC_DAY_WEEK 0x06 |
| 16 | #define CMOS_RTC_DAY_MONTH 0x07 |
| 17 | #define CMOS_RTC_MONTH 0x08 |
| 18 | #define CMOS_RTC_YEAR 0x09 |
| 19 | #define CMOS_STATUS_A 0x0a |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 20 | #define CMOS_STATUS_B 0x0b |
Kevin O'Connor | 4b60c00 | 2008-02-25 22:29:55 -0500 | [diff] [blame] | 21 | #define CMOS_STATUS_C 0x0c |
| 22 | #define CMOS_STATUS_D 0x0d |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 23 | #define CMOS_RESET_CODE 0x0f |
| 24 | #define CMOS_FLOPPY_DRIVE_TYPE 0x10 |
Kevin O'Connor | bdce35f | 2008-02-26 21:33:14 -0500 | [diff] [blame] | 25 | #define CMOS_DISK_DATA 0x12 |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 26 | #define CMOS_EQUIPMENT_INFO 0x14 |
Kevin O'Connor | bdce35f | 2008-02-26 21:33:14 -0500 | [diff] [blame] | 27 | #define CMOS_DISK_DRIVE1_TYPE 0x19 |
| 28 | #define CMOS_DISK_DRIVE2_TYPE 0x1a |
| 29 | #define CMOS_DISK_DRIVE1_CYL 0x1b |
| 30 | #define CMOS_DISK_DRIVE2_CYL 0x24 |
Kevin O'Connor | e09b982 | 2008-03-06 19:16:37 -0500 | [diff] [blame] | 31 | #define CMOS_MEM_EXTMEM_LOW 0x30 |
| 32 | #define CMOS_MEM_EXTMEM_HIGH 0x31 |
Kevin O'Connor | 4b60c00 | 2008-02-25 22:29:55 -0500 | [diff] [blame] | 33 | #define CMOS_CENTURY 0x32 |
Kevin O'Connor | e09b982 | 2008-03-06 19:16:37 -0500 | [diff] [blame] | 34 | #define CMOS_MEM_EXTMEM2_LOW 0x34 |
| 35 | #define CMOS_MEM_EXTMEM2_HIGH 0x35 |
Kevin O'Connor | 38fcbfe | 2008-02-25 22:30:47 -0500 | [diff] [blame] | 36 | #define CMOS_BIOS_BOOTFLAG1 0x38 |
Kevin O'Connor | 15aee2e | 2008-03-01 13:34:04 -0500 | [diff] [blame] | 37 | #define CMOS_BIOS_DISKTRANSFLAG 0x39 |
Kevin O'Connor | 38fcbfe | 2008-02-25 22:30:47 -0500 | [diff] [blame] | 38 | #define CMOS_BIOS_BOOTFLAG2 0x3d |
Kevin O'Connor | 59c35f2 | 2008-10-25 23:05:42 -0400 | [diff] [blame] | 39 | #define CMOS_MEM_HIGHMEM_LOW 0x5b |
| 40 | #define CMOS_MEM_HIGHMEM_MID 0x5c |
| 41 | #define CMOS_MEM_HIGHMEM_HIGH 0x5d |
Kevin O'Connor | 31bfad6 | 2008-12-16 23:50:52 -0500 | [diff] [blame] | 42 | #define CMOS_BIOS_SMP_COUNT 0x5f |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 43 | |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 44 | // CMOS_FLOPPY_DRIVE_TYPE bitdefs |
| 45 | #define CFD_NO_DRIVE 0 |
| 46 | #define CFD_360KB 1 |
| 47 | #define CFD_12MB 2 |
| 48 | #define CFD_720KB 3 |
| 49 | #define CFD_144MB 4 |
| 50 | #define CFD_288MB 5 |
| 51 | |
Kevin O'Connor | 18e38b2 | 2008-12-10 20:40:13 -0500 | [diff] [blame] | 52 | #ifndef __ASSEMBLY__ |
| 53 | |
| 54 | #include "ioport.h" // inb, outb |
| 55 | |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 56 | static inline u8 |
| 57 | inb_cmos(u8 reg) |
| 58 | { |
Kevin O'Connor | 75f49b3 | 2009-03-07 00:07:24 -0500 | [diff] [blame] | 59 | reg |= NMI_DISABLE_BIT; |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 60 | outb(reg, PORT_CMOS_INDEX); |
| 61 | return inb(PORT_CMOS_DATA); |
| 62 | } |
| 63 | |
| 64 | static inline void |
| 65 | outb_cmos(u8 val, u8 reg) |
| 66 | { |
Kevin O'Connor | 75f49b3 | 2009-03-07 00:07:24 -0500 | [diff] [blame] | 67 | reg |= NMI_DISABLE_BIT; |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 68 | outb(reg, PORT_CMOS_INDEX); |
| 69 | outb(val, PORT_CMOS_DATA); |
| 70 | } |
| 71 | |
Kevin O'Connor | 18e38b2 | 2008-12-10 20:40:13 -0500 | [diff] [blame] | 72 | #endif // !__ASSEMBLY__ |
| 73 | |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 74 | #endif // cmos.h |