Some events like SYSEX message, however, need larger data space than the standard data. For such events, ALSA sequencer provides seveal different data storage types.
Normal events stores their parameters on data field (12 byte).
SYSEX or a returned error use this type. The actual data is stored on an extra allocated space via malloc. The data contains only the length and the pointer of extra-data:
typedef struct { int len; /* length of data */ void *ptr; /* pointer to data (note: maybe 64-bit) */ } snd_seq_ev_ext;On sequecer kernel, the whole extra-data is duplicated, so that the event can be scheduled on queue.
This type refers also an extra data space like variable length data, but the extra-data is not duplicated but but referred as a user-space data on kernel, so that it reduces the time and resource for transferring large bulk of data like synth sample wave. This data type, however, can be used only for direct dispatch mode. The data length and pointer are stored also in data.ext field as well as variable length data.
The data pointer is referred as SYSV IPC. This type is not fully implemented yet.