DS1225Y nvram device, by Herve Poussineau.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2460 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									c5be9f0898
								
							
						
					
					
						commit
						9542611a66
					
				| @ -383,7 +383,7 @@ CPPFLAGS += -DHAS_AUDIO | ||||
| endif | ||||
| ifeq ($(TARGET_ARCH), mips) | ||||
| VL_OBJS+= mips_r4k.o mips_malta.o mips_timer.o mips_int.o dma.o vga.o serial.o i8254.o i8259.o | ||||
| VL_OBJS+= ide.o gt64xxx.o pckbd.o ps2.o fdc.o mc146818rtc.o usb-uhci.o acpi.o | ||||
| VL_OBJS+= ide.o gt64xxx.o pckbd.o ps2.o fdc.o mc146818rtc.o usb-uhci.o acpi.o ds1225y.o | ||||
| VL_OBJS+= piix_pci.o parallel.o mixeng.o cirrus_vga.o $(SOUND_HW) $(AUDIODRV) | ||||
| DEFINES += -DHAS_AUDIO | ||||
| endif | ||||
|  | ||||
							
								
								
									
										121
									
								
								hw/ds1225y.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								hw/ds1225y.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,121 @@ | ||||
| /*
 | ||||
|  * QEMU NVRAM emulation for DS1225Y chip | ||||
|  *  | ||||
|  * Copyright (c) 2007 Hervé Poussineau | ||||
|  *  | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in | ||||
|  * all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||||
|  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|  * THE SOFTWARE. | ||||
|  */ | ||||
| 
 | ||||
| #include "vl.h" | ||||
| 
 | ||||
| typedef enum | ||||
| { | ||||
|     none = 0, | ||||
|     readmode, | ||||
|     writemode, | ||||
| } nvram_open_mode; | ||||
| 
 | ||||
| struct ds1225y_t | ||||
| { | ||||
|     target_ulong mem_base; | ||||
|     uint32_t capacity; | ||||
|     const char *filename; | ||||
|     QEMUFile *file; | ||||
|     nvram_open_mode open_mode; | ||||
| }; | ||||
| 
 | ||||
| static int ds1225y_set_to_mode(ds1225y_t *NVRAM, nvram_open_mode mode, const char *filemode) | ||||
| { | ||||
|     if (NVRAM->open_mode != mode) | ||||
|     { | ||||
|         if (NVRAM->file) | ||||
|             qemu_fclose(NVRAM->file); | ||||
|         NVRAM->file = qemu_fopen(NVRAM->filename, filemode); | ||||
|         NVRAM->open_mode = mode; | ||||
|     } | ||||
|     return (NVRAM->file != NULL); | ||||
| } | ||||
| 
 | ||||
| static uint32_t nvram_readb (void *opaque, target_phys_addr_t addr) | ||||
| { | ||||
|     ds1225y_t *NVRAM = opaque; | ||||
|     int64_t pos; | ||||
| 
 | ||||
|     pos = addr - NVRAM->mem_base; | ||||
|     if (addr >= NVRAM->capacity) | ||||
|         addr -= NVRAM->capacity; | ||||
| 
 | ||||
|     if (!ds1225y_set_to_mode(NVRAM, readmode, "rb")) | ||||
|         return 0; | ||||
|     qemu_fseek(NVRAM->file, pos, SEEK_SET); | ||||
|     return (uint32_t)qemu_get_byte(NVRAM->file); | ||||
| } | ||||
| 
 | ||||
| static void nvram_writeb (void *opaque, target_phys_addr_t addr, uint32_t value) | ||||
| { | ||||
|     ds1225y_t *NVRAM = opaque; | ||||
|     int64_t pos; | ||||
| 
 | ||||
|     pos = addr - NVRAM->mem_base; | ||||
|     if (ds1225y_set_to_mode(NVRAM, writemode, "wb")) | ||||
|     { | ||||
|         qemu_fseek(NVRAM->file, pos, SEEK_SET); | ||||
|         qemu_put_byte(NVRAM->file, (int)value); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| static CPUReadMemoryFunc *nvram_read[] = { | ||||
|     &nvram_readb, | ||||
|     NULL, | ||||
|     NULL, | ||||
| }; | ||||
| 
 | ||||
| static CPUWriteMemoryFunc *nvram_write[] = { | ||||
|     &nvram_writeb, | ||||
|     NULL, | ||||
|     NULL, | ||||
| }; | ||||
| 
 | ||||
| static CPUWriteMemoryFunc *nvram_none[] = { | ||||
|     NULL, | ||||
|     NULL, | ||||
|     NULL, | ||||
| }; | ||||
| 
 | ||||
| /* Initialisation routine */ | ||||
| ds1225y_t *ds1225y_init(target_ulong mem_base, const char *filename) | ||||
| { | ||||
|     ds1225y_t *s; | ||||
|     int mem_index1, mem_index2; | ||||
| 
 | ||||
|     s = qemu_mallocz(sizeof(ds1225y_t)); | ||||
|     if (!s) | ||||
|         return NULL; | ||||
|     s->mem_base = mem_base; | ||||
|     s->capacity = 0x2000; /* Fixed for ds1225y chip: 8K */ | ||||
|     s->filename = filename; | ||||
| 
 | ||||
|     /* Read/write memory */ | ||||
|     mem_index1 = cpu_register_io_memory(0, nvram_read, nvram_write, s); | ||||
|     cpu_register_physical_memory(mem_base, s->capacity, mem_index1); | ||||
|     /* Read-only memory */ | ||||
|     mem_index2 = cpu_register_io_memory(0, nvram_read, nvram_none, s); | ||||
|     cpu_register_physical_memory(mem_base + s->capacity, s->capacity, mem_index2); | ||||
|     return s; | ||||
| } | ||||
| @ -215,6 +215,7 @@ void mips_r4k_init (int ram_size, int vga_ram_size, int boot_device, | ||||
|                      bs_table[2 * i], bs_table[2 * i + 1]); | ||||
| 
 | ||||
|     kbd_init(); | ||||
|     ds1225y_init(0x9000, "nvram"); | ||||
| } | ||||
| 
 | ||||
| QEMUMachine mips_machine = { | ||||
|  | ||||
							
								
								
									
										4
									
								
								vl.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								vl.h
									
									
									
									
									
								
							| @ -941,6 +941,10 @@ int pmac_ide_init (BlockDriverState **hd_table, | ||||
| int cdrom_read_toc(int nb_sectors, uint8_t *buf, int msf, int start_track); | ||||
| int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num); | ||||
| 
 | ||||
| /* ds1225y.c */ | ||||
| typedef struct ds1225y_t ds1225y_t; | ||||
| ds1225y_t *ds1225y_init(target_ulong mem_base, const char *filename); | ||||
| 
 | ||||
| /* es1370.c */ | ||||
| int es1370_init (PCIBus *bus, AudioState *s); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 ths
						ths