complete(&instance->msg_avail_comp);
} else if (m.type == VC_AUDIO_MSG_TYPE_COMPLETE) {
bcm2835_alsa_stream_t *alsa_stream = instance->alsa_stream;
+#if defined(CONFIG_64BIT)
+ irq_handler_t callback =
+ (irq_handler_t) (((unsigned long)m.u.complete.callbackl) |
+ ((unsigned long)m.u.complete.callbackh << 32));
+#else
irq_handler_t callback = (irq_handler_t) m.u.complete.callback;
+#endif
LOG_DBG
(" .. instance=%p, m.type=VC_AUDIO_MSG_TYPE_COMPLETE, complete=%d\n",
instance, m.u.complete.count);
m.u.write.count = count;
// old version uses bulk, new version uses control
m.u.write.max_packet = instance->peer_version < 2 || force_bulk ? 0:4000;
+#if defined(CONFIG_64BIT)
+ m.u.write.callbackl = (uint32_t)(((unsigned long)alsa_stream->fifo_irq_handler)&0xFFFFFFFF);
+ m.u.write.callbackh = (uint32_t)((((unsigned long)alsa_stream->fifo_irq_handler) >> 32)&0xFFFFFFFF);
+#else
m.u.write.callback = alsa_stream->fifo_irq_handler;
m.u.write.cookie = alsa_stream;
+#endif
m.u.write.silence = src == NULL;
/* Send the message to the videocore */
// configure the write audio samples
typedef struct {
uint32_t count; // in bytes
+#if defined(CONFIG_64BIT)
+ uint32_t callbackl;
+ uint32_t callbackh;
+#else
void *callback;
void *cookie;
+#endif
uint16_t silence;
uint16_t max_packet;
} VC_AUDIO_WRITE_T;
// Generic result for a request (VC->HOST)
typedef struct {
int32_t count; // Success value
+#if defined(CONFIG_64BIT)
+ uint32_t callbackl;
+ uint32_t callbackh;
+#else
void *callback;
void *cookie;
+#endif
} VC_AUDIO_COMPLETE_T;
// Message header for all messages in HOST->VC direction