Add PowerPC power-management state check callback.
[qemu] / hw / es1370.c
index fc7ac0a..d607a94 100644 (file)
@@ -249,7 +249,7 @@ static void print_sctl (uint32_t val)
 #endif
 
 #ifndef SILENT_ES1370
-#define lwarn(...) AUD_log ("es1370: warning:", __VA_ARGS__)
+#define lwarn(...) AUD_log ("es1370: warning", __VA_ARGS__)
 #else
 #define lwarn(...)
 #endif
@@ -324,7 +324,7 @@ static void es1370_update_status (ES1370State *s, uint32_t new_status)
     else {
         s->status = new_status & ~STAT_INTR;
     }
-    pci_set_irq (s->pci_dev, 0, !!level);
+    qemu_set_irq(s->pci_dev->irq[0], !!level);
 }
 
 static void es1370_reset (ES1370State *s)
@@ -350,7 +350,7 @@ static void es1370_reset (ES1370State *s)
             s->dac_voice[i] = NULL;
         }
     }
-    pci_set_irq (s->pci_dev, 0, 0);
+    qemu_irq_lower(s->pci_dev->irq[0]);
 }
 
 static void es1370_maybe_lower_irq (ES1370State *s, uint32_t sctl)
@@ -423,6 +423,7 @@ static void es1370_update_voices (ES1370State *s, uint32_t ctl, uint32_t sctl)
                 as.freq = new_freq;
                 as.nchannels = 1 << (new_fmt & 1);
                 as.fmt = (new_fmt & 2) ? AUD_FMT_S16 : AUD_FMT_U8;
+                as.endianness = 0;
 
                 if (i == ADC_CHANNEL) {
                     s->adc_voice =
@@ -477,9 +478,10 @@ static inline uint32_t es1370_fixup (ES1370State *s, uint32_t addr)
 IO_WRITE_PROTO (es1370_writeb)
 {
     ES1370State *s = opaque;
-    addr = es1370_fixup (s, addr);
     uint32_t shift, mask;
 
+    addr = es1370_fixup (s, addr);
+
     switch (addr) {
     case ES1370_REG_CONTROL:
     case ES1370_REG_CONTROL + 1:
@@ -590,6 +592,13 @@ IO_WRITE_PROTO (es1370_writel)
         ldebug ("chan %d frame address %#x\n", d - &s->chan[0], val);
         break;
 
+    case ES1370_REG_PHANTOM_FRAMECNT:
+        lwarn ("writing to phantom frame count %#x\n", val);
+        break;
+    case ES1370_REG_PHANTOM_FRAMEADR:
+        lwarn ("writing to phantom frame address %#x\n", val);
+        break;
+
     case ES1370_REG_ADC_FRAMECNT:
         d++;
     case ES1370_REG_DAC2_FRAMECNT:
@@ -659,6 +668,22 @@ IO_READ_PROTO (es1370_readw)
         val = d->scount >> 16;
         break;
 
+    case ES1370_REG_ADC_FRAMECNT:
+        d++;
+    case ES1370_REG_DAC2_FRAMECNT:
+        d++;
+    case ES1370_REG_DAC1_FRAMECNT:
+        val = d->frame_cnt & 0xffff;
+        break;
+
+    case ES1370_REG_ADC_FRAMECNT + 2:
+        d++;
+    case ES1370_REG_DAC2_FRAMECNT + 2:
+        d++;
+    case ES1370_REG_DAC1_FRAMECNT + 2:
+        val = d->frame_cnt >> 16;
+        break;
+
     default:
         val = ~0;
         lwarn ("readw %#x -> %#x\n", addr, val);
@@ -736,6 +761,15 @@ IO_READ_PROTO (es1370_readl)
         val = d->frame_addr;
         break;
 
+    case ES1370_REG_PHANTOM_FRAMECNT:
+        val = ~0U;
+        lwarn ("reading from phantom frame count\n");
+        break;
+    case ES1370_REG_PHANTOM_FRAMEADR:
+        val = ~0U;
+        lwarn ("reading from phantom frame address\n");
+        break;
+
     default:
         val = ~0U;
         lwarn ("readl %#x -> %#x\n", addr, val);
@@ -812,7 +846,7 @@ static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,
     if (s->sctl & loop_sel) {
         /* Bah, how stupid is that having a 0 represent true value?
            i just spent few hours on this shit */
-        lwarn ("whoops non looping mode\n");
+        AUD_log ("es1370: warning", "non looping mode\n");
     }
     else {
         d->frame_cnt = size;
@@ -983,7 +1017,7 @@ int es1370_init (PCIBus *bus, AudioState *audio)
                                                 -1, NULL, NULL);
 
     if (!d) {
-        fprintf (stderr, "Failed to register PCI device for ES1370\n");
+        AUD_log (NULL, "Failed to register PCI device for ES1370\n");
         return -1;
     }