コード例 #1
0
ファイル: core.c プロジェクト: Babel-builder/linux
/**
 * dwc3_alloc_event_buffers - Allocates @num event buffers of size @length
 * @dwc: pointer to our controller context structure
 * @length: size of event buffer
 *
 * Returns 0 on success otherwise negative errno. In the error case, dwc
 * may contain some buffers allocated but not all which were requested.
 */
static int dwc3_alloc_event_buffers(struct dwc3 *dwc, unsigned length)
{
	int			num;
	int			i;

	num = DWC3_NUM_INT(dwc->hwparams.hwparams1);
	dwc->num_event_buffers = num;

	dwc->ev_buffs = devm_kzalloc(dwc->dev, sizeof(*dwc->ev_buffs) * num,
			GFP_KERNEL);
	if (!dwc->ev_buffs) {
		dev_err(dwc->dev, "can't allocate event buffers array\n");
		return -ENOMEM;
	}

	for (i = 0; i < num; i++) {
		struct dwc3_event_buffer	*evt;

		evt = dwc3_alloc_one_event_buffer(dwc, length);
		if (IS_ERR(evt)) {
			dev_err(dwc->dev, "can't allocate event buffer\n");
			return PTR_ERR(evt);
		}
		dwc->ev_buffs[i] = evt;
	}

	return 0;
}
コード例 #2
0
ファイル: core.c プロジェクト: MrJwiz/UBER-M
/**
 * dwc3_alloc_event_buffers - Allocates @num event buffers of size @length
 * @dwc: pointer to our controller context structure
 * @length: size of event buffer
 *
 * Returns 0 on success otherwise negative errno. In the error case, dwc
 * may contain some buffers allocated but not all which were requested.
 */
static int __devinit dwc3_alloc_event_buffers(struct dwc3 *dwc, unsigned length)
{
    int			num;
    int			i;

    num = DWC3_NUM_INT(dwc->hwparams.hwparams1);
    dwc->num_event_buffers = num;

    dwc->ev_buffs = kzalloc(sizeof(*dwc->ev_buffs) * num, GFP_KERNEL);
    if (!dwc->ev_buffs) {
        dev_err(dwc->dev, "can't allocate event buffers array\n");
        return -ENOMEM;
    }

    for (i = 0; i < num; i++) {
        struct dwc3_event_buffer	*evt;

        /*
         * As SW workaround, allocate 8 bytes more than size of event
         * buffer given to USB Controller to avoid possible memory
         * corruption caused by event buffer overflow when Hw writes
         * Vendor Device test event which could be of 12 bytes.
         */
        evt = dwc3_alloc_one_event_buffer(dwc, (length + 8));
        if (IS_ERR(evt)) {
            dev_err(dwc->dev, "can't allocate event buffer\n");
            return PTR_ERR(evt);
        }
        dwc->ev_buffs[i] = evt;
    }

    return 0;
}