Index: uspace/lib/c/generic/device/nic.c
===================================================================
--- uspace/lib/c/generic/device/nic.c	(revision fd6bd6d12960c6582429396112e1f7ba96fd148c)
+++ uspace/lib/c/generic/device/nic.c	(revision f3025861da728fb4754f9d1cdcfeda5675ac98f3)
@@ -44,20 +44,31 @@
 #include <ipc/services.h>
 
-/** Send a packet through the device
- *
- * @param[in] dev_sess
- * @param[in] packet_id Id of the sent packet
- *
- * @return EOK If the operation was successfully completed
- *
- */
-int nic_send_message(async_sess_t *dev_sess, packet_id_t packet_id)
-{
-	async_exch_t *exch = async_exchange_begin(dev_sess);
-	int rc = async_req_2_0(exch, DEV_IFACE_ID(NIC_DEV_IFACE),
-	    NIC_SEND_MESSAGE, packet_id);
-	async_exchange_end(exch);
-	
-	return rc;
+/** Send frame from NIC
+ *
+ * @param[in] dev_sess
+ * @param[in] data     Frame data
+ * @param[in] size     Frame size in bytes
+ *
+ * @return EOK If the operation was successfully completed
+ *
+ */
+int nic_send_frame(async_sess_t *dev_sess, void *data, size_t size)
+{
+	async_exch_t *exch = async_exchange_begin(dev_sess);
+	
+	ipc_call_t answer;
+	aid_t req = async_send_1(exch, DEV_IFACE_ID(NIC_DEV_IFACE),
+	    NIC_SEND_MESSAGE, &answer);
+	sysarg_t retval = async_data_write_start(exch, data, size);
+	
+	async_exchange_end(exch);
+	
+	if (retval != EOK) {
+		async_wait_for(req, NULL);
+		return retval;
+	}
+
+	async_wait_for(req, &retval);
+	return retval;
 }
 
