/[gxemul]/trunk/src/devices/dev_dec_ioasic.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/src/devices/dev_dec_ioasic.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 22 by dpavlin, Mon Oct 8 16:19:37 2007 UTC revision 42 by dpavlin, Mon Oct 8 16:22:32 2007 UTC
# Line 1  Line 1 
1  /*  /*
2   *  Copyright (C) 2004-2006  Anders Gavare.  All rights reserved.   *  Copyright (C) 2004-2007  Anders Gavare.  All rights reserved.
3   *   *
4   *  Redistribution and use in source and binary forms, with or without   *  Redistribution and use in source and binary forms, with or without
5   *  modification, are permitted provided that the following conditions are met:   *  modification, are permitted provided that the following conditions are met:
# Line 25  Line 25 
25   *  SUCH DAMAGE.   *  SUCH DAMAGE.
26   *     *  
27   *   *
28   *  $Id: dev_dec_ioasic.c,v 1.15 2006/01/01 13:17:16 debug Exp $   *  $Id: dev_dec_ioasic.c,v 1.18 2007/06/15 18:44:19 debug Exp $
29   *     *
30   *  DECstation "3MIN" and "3MAX" IOASIC device.   *  COMMENT: IOASIC device used in the DECstation "3MIN" and "3MAX" machines
31   *   *
32   *  TODO:  Lots of stuff, such as DMA and all bits in the control registers.   *  TODO:  Lots of stuff, such as DMA and all bits in the control registers.
33   */   */
# Line 47  Line 47 
47  #define IOASIC_DEBUG  #define IOASIC_DEBUG
48  /* #define debug fatal */  /* #define debug fatal */
49    
50  /*  
  *  dev_dec_ioasic_access():  
  */  
51  DEVICE_ACCESS(dec_ioasic)  DEVICE_ACCESS(dec_ioasic)
52  {  {
53          struct dec_ioasic_data *d = (struct dec_ioasic_data *) extra;          struct dec_ioasic_data *d = extra;
54          uint64_t idata = 0, odata = 0;          uint64_t idata = 0, odata = 0;
55          uint64_t curptr;          uint64_t curptr;
         int dma_len, dma_res;  
56          uint32_t csr;          uint32_t csr;
57          int regnr;          int dma_len, dma_res, regnr;
58    
59          if (writeflag == MEM_WRITE)          if (writeflag == MEM_WRITE)
60                  idata = memory_readmax64(cpu, data, len);                  idata = memory_readmax64(cpu, data, len);
# Line 187  DEVICE_ACCESS(dec_ioasic) Line 184  DEVICE_ACCESS(dec_ioasic)
184    
185                          /*  Make sure that the CPU interrupt is deasserted as                          /*  Make sure that the CPU interrupt is deasserted as
186                              well:  */                              well:  */
187                          if (idata != 0)  fatal("TODO: interrupt rewrite!\n");
188                                  cpu_interrupt_ack(cpu, 8 + idata);  abort();
189    //                      if (idata != 0)
190    //                              cpu_interrupt_ack(cpu, 8 + idata);
191                  }                  }
192                  break;                  break;
193    
# Line 196  DEVICE_ACCESS(dec_ioasic) Line 195  DEVICE_ACCESS(dec_ioasic)
195                  if (writeflag == MEM_WRITE) {                  if (writeflag == MEM_WRITE) {
196                          d->reg[(IOASIC_IMSK - IOASIC_SLOT_1_START) / 0x10] =                          d->reg[(IOASIC_IMSK - IOASIC_SLOT_1_START) / 0x10] =
197                              idata;                              idata;
198                          cpu_interrupt_ack(cpu, 8 + 0);  fatal("TODO: interrupt rewrite!\n");
199    abort();
200    //                      cpu_interrupt_ack(cpu, 8 + 0);
201                  } else                  } else
202                          odata = d->reg[(IOASIC_IMSK - IOASIC_SLOT_1_START) /                          odata = d->reg[(IOASIC_IMSK - IOASIC_SLOT_1_START) /
203                              0x10];                              0x10];
# Line 250  DEVICE_ACCESS(dec_ioasic) Line 251  DEVICE_ACCESS(dec_ioasic)
251  struct dec_ioasic_data *dev_dec_ioasic_init(struct cpu *cpu,  struct dec_ioasic_data *dev_dec_ioasic_init(struct cpu *cpu,
252          struct memory *mem, uint64_t baseaddr, int rackmount_flag)          struct memory *mem, uint64_t baseaddr, int rackmount_flag)
253  {  {
254          struct dec_ioasic_data *d = malloc(sizeof(struct dec_ioasic_data));          struct dec_ioasic_data *d;
255          if (d == NULL) {  
256                  fprintf(stderr, "out of memory\n");          CHECK_ALLOCATION(d = malloc(sizeof(struct dec_ioasic_data)));
                 exit(1);  
         }  
257          memset(d, 0, sizeof(struct dec_ioasic_data));          memset(d, 0, sizeof(struct dec_ioasic_data));
258    
259          d->rackmount_flag = rackmount_flag;          d->rackmount_flag = rackmount_flag;
# Line 262  struct dec_ioasic_data *dev_dec_ioasic_i Line 261  struct dec_ioasic_data *dev_dec_ioasic_i
261          memory_device_register(mem, "dec_ioasic", baseaddr,          memory_device_register(mem, "dec_ioasic", baseaddr,
262              DEV_DEC_IOASIC_LENGTH, dev_dec_ioasic_access, (void *)d,              DEV_DEC_IOASIC_LENGTH, dev_dec_ioasic_access, (void *)d,
263              DM_DEFAULT, NULL);              DM_DEFAULT, NULL);
264    
265          return d;          return d;
266  }  }
267    

Legend:
Removed from v.22  
changed lines
  Added in v.42

  ViewVC Help
Powered by ViewVC 1.1.26