Example #1
0
static void
frame_cache(struct tvb_frame *frame_tvb)
{
	struct wtap_pkthdr phdr; /* Packet header */

	if (frame_tvb->buf == NULL) {
		frame_tvb->buf = (struct Buffer *) g_malloc(sizeof(struct Buffer));

		/* XXX, register frame_tvb to some list which frees from time to time not used buffers :] */
		buffer_init(frame_tvb->buf, frame_tvb->tvb.length + frame_tvb->offset);

		if (!frame_read(frame_tvb, &phdr, frame_tvb->buf))
			{ /* TODO: THROW(???); */ }
	}

	frame_tvb->tvb.real_data = buffer_start_ptr(frame_tvb->buf) + frame_tvb->offset;
}
Example #2
0
int
net_cs8900a_read_halfword (struct device_desc *dev, uint32 addr, uint16 * data)
{
	struct net_device *net_dev = (struct net_device *) dev->dev;
	struct net_cs8900a_io *io = (struct net_cs8900a_io *) dev->data;

	int offset = (uint16) (addr - dev->base);
	int ret = ADDR_HIT;

	*data = 0;
	switch (offset) {
	case Rx_Frame_Port:
		frame_read (dev, data);
		break;
	case IO_ISQ:
		isq_read (dev, data);
		break;
	case PP_Address:
		*data = io->pp_address | 0x3000;
		break;
	case PP_Data:
		if (io->pp_address >= 0x100 && io->pp_address < 0x140) {

			ctrl_status_read (dev, data);
		}
		switch (io->pp_address) {
		case PP_ProductID:
			*data = io->product_id[0];
			break;
		case PP_ProductID + 2:
			*data = io->product_id[1];
			break;
		case PP_IntNum:
			*data = io->int_num;
			break;
		case PP_EEPROMCommand:
			*data = io->eeprom_cmd;
			break;
		case PP_EEPROMData:
			eeprom_read (dev, data);
			break;

		case PP_IA:
		case PP_IA + 2:
		case PP_IA + 4:
			*data = io->ieee_addr[io->pp_address - PP_IA] |
				(io->
				 ieee_addr[io->pp_address - PP_IA + 1] << 8);
			break;
		case PP_ISQ:
			isq_read (dev, data);
			break;

		case PP_RxStatus:
			*data = *(io->rx_status_p);
			*(io->rx_status_p) = 0;
			io->rx_tail++;
			break;
		case PP_RxLength:
			*data = *(io->rx_length_p);
			*(io->rx_length_p) = 0;
			io->rx_tail++;
			break;
		}
		//printf("addr:%x, data:%x\n", io->pp_address, *data);
		break;
	default:
		break;
	}
	return ret;

}